Camera基本开发知识
来源:互联网 发布:php大牛的博客 编辑:程序博客网 时间:2024/06/07 05:00
加权限;如API23及以上,要请求权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" />
1:调用系统相机
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQ_1);
2:调用系统拍照,并把图片存在特定文件夹
private String mFilePath; mFilePath= Environment.getExternalStorageDirectory().getPath(); mFilePath=mFilePath+"/"+"temp.png"; Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //将拍的图片存在这个路径下 Uri photoUri=Uri.fromFile(new File(mFilePath)); intent.putExtra(MediaStore.EXTRA_OUTPUT,photoUri); startActivityForResult(intent, REQ_2);
拍照结束回调:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); FileInputStream fis=null; if(resultCode==RESULT_OK){ if(requestCode==REQ_1){ Bundle bundle=data.getExtras(); Bitmap bit= (Bitmap) bundle.get("data"); iv.setImageBitmap(bit); }else if(requestCode==REQ_2){ try { fis=new FileInputStream(mFilePath); Bitmap bitmap= BitmapFactory.decodeStream(fis); iv.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
3:自定义相机拍照
onResume()中获取相机并绑定surfaceView,开启预览
@Override protected void onResume() { super.onResume(); if(mCamera==null){ mCamera=getCamera(); if (mHolder!=null){ setStartPreview(mCamera,mHolder); } } } /** * 获取系统camera对象 * @return */ private Camera getCamera(){ Camera camera=null; try { camera=Camera.open(); }catch (Exception e){ camera=null; e.printStackTrace(); } return camera; } //实时预览相机图像 private void setStartPreview(Camera camera,SurfaceHolder holder){ try { camera.setPreviewDisplay(holder);//将相机与surfaceView控件绑定 camera.setDisplayOrientation(90);//将相机试图旋转90度,因为默认是横屏显示 camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } }
当点击拍照的时候:
//点击事件 public void capture(View view){ Camera.Parameters parameters=mCamera.getParameters();//参数 parameters.setPictureFormat(ImageFormat.JPEG); parameters.setPictureSize(800, 400); parameters.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦 mCamera.autoFocus(new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if (success) { camera.takePicture(null, null, pictureCallback); } } }); }//拍照之后回调取数据private Camera.PictureCallback pictureCallback=new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File file=new File("/sdcard/temp.png"); try { FileOutputStream fos=new FileOutputStream(file); fos.write(data); fos.close(); Intent intent =new Intent(CustomActivity.this,ResultActivity.class); intent.putExtra("picpath",file.getAbsolutePath()); startActivity(intent); CustomActivity.this.finish(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } };
完整代码如下
public class CustomActivity extends AppCompatActivity implements SurfaceHolder.Callback { private SurfaceView mSview; private Camera mCamera; private SurfaceHolder mHolder; private Camera.PictureCallback pictureCallback=new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File file=new File("/sdcard/temp.png"); try { FileOutputStream fos=new FileOutputStream(file); fos.write(data); fos.close(); Intent intent =new Intent(CustomActivity.this,ResultActivity.class); intent.putExtra("picpath",file.getAbsolutePath()); startActivity(intent); CustomActivity.this.finish(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom); initView(); mHolder=mSview.getHolder(); mHolder.addCallback(this); } private void initView() { mSview= (SurfaceView) findViewById(R.id.preView); mSview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCamera.autoFocus(null);//点击自动对焦 } }); } @Override protected void onResume() { super.onResume(); if(mCamera==null){ mCamera=getCamera(); if (mHolder!=null){ setStartPreview(mCamera,mHolder); } } } @Override protected void onPause() { super.onPause(); releaseCamera(); } //点击事件 public void capture(View view){ Camera.Parameters parameters=mCamera.getParameters();//参数 parameters.setPictureFormat(ImageFormat.JPEG); parameters.setPictureSize(800, 400); parameters.setFlashMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦 mCamera.autoFocus(new Camera.AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if (success) { camera.takePicture(null, null, pictureCallback); } } }); } /** * 获取系统camera对象 * @return */ private Camera getCamera(){ Camera camera=null; try { camera=Camera.open(); }catch (Exception e){ camera=null; e.printStackTrace(); } return camera; } //实时预览相机图像 private void setStartPreview(Camera camera,SurfaceHolder holder){ try { camera.setPreviewDisplay(holder);//将相机与surfaceView控件绑定 camera.setDisplayOrientation(90);//将相机试图旋转90度,因为默认是横屏显示 camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } //释放相机资源 private void releaseCamera(){ if(mCamera!=null){ mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera=null; } } @Override public void surfaceCreated(SurfaceHolder holder) { setStartPreview(mCamera, mHolder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { mCamera.stopPreview(); setStartPreview(mCamera, mHolder); } @Override public void surfaceDestroyed(SurfaceHolder holder) { releaseCamera(); }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="30"> <SurfaceView android:id="@+id/preView" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="水印" android:textColor="#f6424a" android:textSize="20sp" android:layout_marginBottom="61dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /> </RelativeLayout> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="capture" android:onClick="capture"/></LinearLayout>
public class ResultActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); String path=getIntent().getStringExtra("picpath"); // Bitmap bitmap= BitmapFactory.decodeFile(path); ImageView iv= (ImageView) findViewById(R.id.pic); //iv.setImageBitmap(bitmap); try { FileInputStream fis=new FileInputStream(path); Bitmap bit = BitmapFactory.decodeStream(fis); Matrix mat=new Matrix(); mat.setRotate(90); //把原来当位图旋转90度 bit=Bitmap.createBitmap(bit,0,0,bit.getWidth(),bit.getHeight(),mat,true); iv.setImageBitmap(bit); } catch (FileNotFoundException e) { e.printStackTrace(); } }}
1 0
- Camera基本开发知识
- Android Camera开发(二)之扩展知识
- camera 模块知识
- camera相关知识
- camera 模块知识
- camera相关知识 .
- camera 模块知识
- camera 知识集锦
- Camera知识相关
- 游戏开发中的基本物理学知识
- Camera启动基本流程
- camera基本代码架构
- camera基本代码架构
- iOS开发篇小知识 - CATransform3D的基本属性
- Android Camera开发启动
- android camera开发笔记
- Android Camera开发
- Android Camera开发
- 基础练习——百钱买百鸡(C++)
- AdPlug库介绍
- 系统架构
- PAT B1048
- Redis SDS
- Camera基本开发知识
- NO.7 HTML之继续列表之旅
- C#中的ToolStrip控件的使用
- 配置BaseApplication,方便项目中随时调用上下文Context
- python学习-装饰器
- 找出数组中超出总数1/4的数字
- 如何安装MySQL5.0图解教程
- Android6.0指纹识别开发实例
- Android相关