-
自动对焦设置查看全部
-
隐式调用startActivity(new Intent(MediaStore.ACTION_IMAGE_CAPTURE)),开启相机 使应用具有相机功能加上过滤器<activity....> <intent-filter> <action android:name="android.intent.action.IMAGE_CAPTURE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>查看全部
-
调用系统相机流程查看全部
-
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri uri = Uri.fromFile(new File(pathFile)); //将Uri指向创建的文件对象 intent.putExtra(MediaStore.EXTRA_OUTPUT,uri); //更改拍照文件存储路径 startActivityForResult(intent, CAREMA_REQUEST_CODE_2);查看全部
-
自定义相机步骤:见截图查看全部
-
添加相机水印小功能 只需要在预览界面的layout布局中添加一个textview就行,同理也可以加入其它任何形式的控件,比如imageview等等 注意:点击拍照后,textview信息并不会默认保存到照片信息中去查看全部
-
五、自定义camera总结: 1)建立camera对象 2)建立SurfaceView对象 3)将camera对象和SurfaceView对象进行绑定 在CustomCamera核心类中主要做了三件事 1)创建了camera的生命周期方法 在getCamera(){}中获取camera对象,并做初始化操作 Camera.open(); 在setStartPreview方法中将camera对象和surfaceView绑定,让camera开始进行取景工作,预览显示画面 在releaseCamera()方法中释放camera所占用的系统资源,同时解除camera和surfaceview 2)在activity生命周期方法中对camera进行管理 在onResume方法中获取camera对象,调用setStartPreview方法 在onPause方法中调用releaseCamera()方法 在surfaceView的三个方法中分别对相机生命周期进行管理 3)真正拍照方法startCapture 参数设置,同时在拍照的过程中将拍照的照片信息保存到临时文件中,展示在另外一个activity里 细节优化: 1)相机预览过程中并没有自动对焦,只有在点击拍照按钮之后,才会parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); //设置对焦模式:自动对焦 优化方法:点击屏幕,实现自动对焦 实现:给surfaceview添加点击事件 mPreview.setOnClickListener(this); @Override public void onClick(View v) { mCamera.autoFocus(null);//不需要返回任何结果,只是预览界面 }查看全部
-
实现ResultActivity 布局:textview + imageview ResultActivity onCreate方法,如截图 String path = getIntent().getStringExtra("picPath"); ImageView imageView = (ImageView)findViewById(R.id.pic); FileInputStream fis = new FileInputStream(path); //获取文件输入流 Bitmap bitmap = BitmapFatory.decodeStream(fis); //获取bitmap Matrix matrix = new Matrix(); matrix.setRotate(90); //变换矩阵,旋转90度 bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(),matrix, true); //将图片旋转90度 imageView.setImageBitmap(bitmap);查看全部
-
接12) mPictureCallback定义如下: private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback(){ @Override public void onPictureTaken(byte[] data, Camera camera){ //data数据需要保存到指定路径下的临时文件中 File tempFile = new File("/sdcard/temp.png"); FileOutputStream fos = new FileOutputStream(tempFile); fos.write(data); fos.close(); //将图片显示到ResultActivity的imageview中 Intent intent = new Intent(CustomCamera.this, ResultActivity.class); intent.putExtra("picPath",tempFile.getAbsolutePath()); startActivity(intent); CustomCamera.this.finish(); } }查看全部
-
12)实现点击拍照功能 a、拍照参数调整 Camera.Parameters parameters = mCamera.getParameters();//获取参数 parameters.setPictureFormat(ImageFormat.JPEG);//设置图片格式 parameters.setPreviewSize(800,400); //设置图片大小 parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//设置对焦模式 自动对焦 //对焦完全清晰后再拍照,所以使用一个回调函数,当对焦成功后再拍 mCamera.autoFocus(new Camera.AutoFocusCallback(){ @Override public void onAutoFocus(boolean success, Camera camera){ if(success){ //对焦完成 mCamera.takePicture(null,null, mPictureCallback); } } });查看全部
-
接四 9)在onResume()中调用setStartPreview完成绑定 @Override protected void onResume() { super.onResume(); if (mCamera == null){ mCamera = getCamera(); if(mHolder != null){ setStartPreview(mCamera, mHolder); } } } 10)在releaseCamera()方法中,也需要释放SurfaceHolder资源 /** * 释放相机所占用的资源 * */ private void releaseCamera(){ if(mCamera != null){ mCamera.setPreviewCallback(null); //将相机回调置空,取消surfaceview和camera的关联 mCamera.stopPreview(); //取消相机的取景功能 mCamera.release(); //释放相机占用资源 mCamera = null; } } 11)实现SurfaceHolder的三个方法 @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(); }查看全部
-
接 四、4) 5)获取camera对象 public Camera getCamera(){ Camera camera = Camera.open(); return camera; } 6)释放相机资源 private void releaseCamera(){ mCamera.release(); } 7)将Camera与Activity的生命周期绑定 Activity onPause的时候,释放camera资源 Activity onResume的时候,初始化camera对象 8)下一步将camera和界面的显示进行绑定,即让界面上可以实时显示预览效果,并最终完成拍照功能 private SurfaceView mPreview; //显示相机取景图片 使用SurfaceView,需要implements SurfaceHolder.Callback方法,并重写其中的三个方法; 使用SurfaceView之前,还需要创建SurfaceHolder对象: SurfaceHolder mHolder = mPreview.getHolder(); mHolder.addCallback(this); //将camera对象和surfaceView绑定,让界面上可以实时显示预览效果 private void setStartPreview(Camera camera, SurfaceHolder holder){ camera.setPreviewDisplay(holder);//完成绑定 camera.setDisplayOrientation(90); //将系统camera预览角度进行调整 camera.startPreview();//在surfaceview中去预览camera中的图像 } 注意:系统默认camera是横屏的,所以预览图像也是横屏,因此我们需要增加一个方法,让整个camera能够竖过来 camera.setDisplayOrientation(90); //将camera旋转90度,从横屏变成竖屏查看全部
-
四、自定义Camera Camera使用注意事项: 1)相机使用结束后要及时释放其占用的资源,将camera和activity的生命周期绑定 2)Camera所在包是android.hardware.Camera;Camera2是更高级的Camera 3)增加自定义Camera类,CustomCamera extends Activity 4)布局:一个button,点击时进行拍照 一个SurfaceView,显示相机取景图片 <?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"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Capture" android:onClick="startCapture"/> <SurfaceView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/sv_preview"/> </LinearLayout>查看全部
-
获取Camera对象 见截图查看全部
-
调用系统Camera知识点回顾: 如何打开摄像头, 1、通过intent隐式调用的方法,intent里面的参数是MediaStore.ACTION_IMAGE_CAPTURE 2、在Manifest文件中的activity中添加一个新的action 属性为android.media.action.IMAGE_CAPTURE 新增加一个category name为android.intent.category.DEFAULT查看全部
举报
0/150
提交
取消