安卓拍照程序4.4可用
来源:互联网 发布:淘宝网壹号人家 编辑:程序博客网 时间:2024/05/22 03:14
MainActivity.java主界面
package com.example.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.hardware.Camera.ShutterCallback;import android.os.Bundle;import android.os.Environment;import android.util.DisplayMetrics;import android.view.Display;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.EditText;import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener {private SurfaceView sView;private SurfaceHolder surfaceHolder;private int screenWidth,screenHeight;private Camera camera;private boolean isPreview=false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置全屏requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.activity_main);//获取窗口管理器WindowManager wm=getWindowManager();Display display=wm.getDefaultDisplay();DisplayMetrics metrics=new DisplayMetrics();//获取屏幕的宽和高display.getMetrics(metrics);screenWidth=metrics.widthPixels;screenHeight=metrics.heightPixels;//获取界面中的SurfaceView组件sView=(SurfaceView) findViewById(R.id.sView);/*//设置该Surface不需要自己维护缓冲区sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);*///获得SurfaceView的SurfaceHoldersurfaceHolder=sView.getHolder();surfaceHolder.addCallback(new Callback() {public void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubif(camera!=null){if(isPreview) camera.stopPreview();camera.release();camera=null;}}public void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubinitCamera();}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}});}private void initCamera() {if(!isPreview){//此处默认打开后置摄像头//通过传入参数可以打开前置摄像头camera=Camera.open(0);//1camera.setDisplayOrientation(90);}if(camera!=null&&!isPreview){try {Camera.Parameters parameters=camera.getParameters();//设置预览图片的大小parameters.setPreviewSize(screenWidth, screenHeight);//设置预览照片时每秒显示多少帧的最小值和最大值parameters.setPreviewFpsRange(4, 10);//设置图片格式parameters.setPictureFormat(ImageFormat.JPEG);//设置JPG图片的质量parameters.set("jpeg-quality", 85);//通过SurfaceView显示取景画面camera.setPreviewDisplay(surfaceHolder);//开始预览camera.startPreview();} catch (Exception e) {// TODO: handle exception}isPreview=true;}}public void capture(View source){if(camera!=null){camera.autoFocus(autoFocusCallback);}}AutoFocusCallback autoFocusCallback=new AutoFocusCallback() {//对焦时激发该方法@Overridepublic void onAutoFocus(boolean success, Camera camera) {if(success){camera.takePicture(new ShutterCallback() {@Overridepublic void onShutter() {// TODO Auto-generated method stub//按下快门执行此处代码}}, new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stub//此处决定是否需要保存原始照片信息}}, myJpegCallback);}}};PictureCallback myJpegCallback=new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {// TODO Auto-generated method stub//根据拍照所得的数据创建位图final Bitmap bmBitmap=BitmapFactory.decodeByteArray(data, 0, data.length);//加载/layout/save.xml文件对应的布局资源View saveDialogView=getLayoutInflater().inflate(R.layout.save, null);final EditText photoName=(EditText)saveDialogView.findViewById(R.id.phone_name);//获取saveDialog对话框上的ImageView组件ImageView showImageView=(ImageView)saveDialogView.findViewById(R.id.show);//显示刚刚拍得的照片showImageView.setImageBitmap(bmBitmap);new AlertDialog.Builder(MainActivity.this).setView(saveDialogView).setPositiveButton("确定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub// 创建一个位于SD卡上的文件File file = new File(Environment.getExternalStorageDirectory(), photoName.getText().toString() + ".jpg");FileOutputStream outStream = null;try{// 打开指定文件对应的输出流outStream = new FileOutputStream(file);// 把位图输出到指定文件中bmBitmap.compress(CompressFormat.JPEG, 100,outStream);outStream.close();}catch (IOException e){e.printStackTrace();}}} ).setNegativeButton("取消", null).show();camera.stopPreview();camera.startPreview();isPreview=true;}};@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent=new Intent();}}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" ><SurfaceViewandroid:id="@+id/sView"android:layout_width="match_parent" android:layout_height="match_parent"/><ImageButtonandroid:layout_width="wrap_content" android:layout_height="wrap_content"android:onClick="capture" android:src="@drawable/capture"android:layout_alignParentBottom="true"android:layout_alignParentRight="true" /></RelativeLayout>
save.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayoutandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="8dip"android:text="@string/photo_name" /><!-- 定义一个文本框来让用户输入照片名 --><EditTextandroid:id="@+id/phone_name"android:layout_width="fill_parent"android:layout_height="wrap_content"/></LinearLayout><!-- 定义一个图片框来显示照片 --> <ImageViewandroid:id="@+id/show"android:layout_width="240px"android:layout_height="315px"android:scaleType="fitCenter"android:layout_marginTop="10dp"/></LinearLayout>
最后不要忘了加权限
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="21" /> <uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name = "android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
0 0
- 安卓拍照程序4.4可用
- 安卓拍照
- 安卓拍照
- 安卓拍照问题解决
- 安卓去除拍照声音
- 安卓拍照,各种兼容
- 安卓拍照并裁剪
- 安卓拍照+音乐播放
- 安卓在程序中调用系统照相机拍照后获得图片
- 实现自定义的安卓拍照功能
- Android调用安卓相机拍照上传
- 安卓启动拍照并保存照片
- 安卓调用系统相机拍照
- 安卓利用SurfaceView实现拍照功能
- 安卓 自定义相机,身份证拍照
- 安卓 多媒体之视频,拍照
- 安卓实现手机拍照功能
- 安卓开发:使用手机拍照功能
- x264的nal分析
- 可恨的BOM?!
- Java内省机制
- 为何越容易得到越不知珍惜?
- 图论第二章图的遍历与活动网络问题
- 安卓拍照程序4.4可用
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
- 【算法题集锦之三】--迷宫的随机生成和路径搜索
- linux 下的rar解压命令
- poj 3321 树状数组
- 7.17_java学习_静态代码块
- 程序员生存定律——成长路上常见的坑
- flex java传进制文件小结
- java学习笔记