android自制相机

上传人:公**** 文档编号:431231121 上传时间:2023-11-23 格式:DOC 页数:8 大小:100.50KB
返回 下载 相关 举报
android自制相机_第1页
第1页 / 共8页
android自制相机_第2页
第2页 / 共8页
android自制相机_第3页
第3页 / 共8页
android自制相机_第4页
第4页 / 共8页
android自制相机_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《android自制相机》由会员分享,可在线阅读,更多相关《android自制相机(8页珍藏版)》请在金锄头文库上搜索。

1、功能要求:利用系统提供的包自制相机应用,可以完成拍照,保存,切换前后摄像头以及添加滤镜的任务。利用androidhardwareCamera类完成1. 授权首先,需要授权。需要自动对焦功能的话,还需要:2. 用XML进行布局放入一个名为camera的再放入一个名为image的3. 创建一个Activity同时实现SurfaceHolder.Callback接门。SurfaceHolder.Callback是用于接受发生在SurfaceView中变化的信息SurfaceHolder.Callback实现三个函数:surfaceChanged当surface的人小或是尺寸变化的时候调用surfac

2、eCreated当surface被创建时调用surfaceDestroyed当surface被毁坏时调用4. 写onCreate()函数getWindow()setFormat(PixelFormatTRANSLUCENT);requestWindowFeature(WindowFEATURENOTITLE);getWindow()setFlags(WindowManagerLayoutParamsFLAG_FULLSCREEN,WindowManagerLayoutParamsFLAG_FULLSCREEN);屏幕显示设为半透明,全屏(没有Noticification),没有标题setCon

3、tentView(Rayout.main);mSurfaceView=(SurfaceView)findViewByld(R.id.surface_camera);设置布局为main.xml获得布局中SurfaceView的实例mSurfaceHolder=mSurfaceViewgetHolder();mSurfaceHolderaddCallback(this);mSurfaceHoldersetType(SurfaceHolderSURFACE_TYPE_PUSH_BUFFERS);从surfaceview获得holder的实例;通过给holder的实例增加回调函数来控制surfacev

4、iew:并设置surface的type(deprecated,可以被自动设置)5. 补全回调函数publicvoidsurfaceCreated(SurfaoeHolderholder)/TODOAuto-generatedmethodstub/创建一个Camera实例打开设备的第一个背而摄像头mCamera=Cameraopen();mCamerasetPreviewCallback(mPreviewCallback);try/设置surface用来显示实时的预览mCamerasetPreviewDisplay(holder);catch(IOExceptione)eprintStackTr

5、ace(); publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight)if(mPreviewRunning)/停止相机功能mCamerastopPreview();/获取Camera.Parameters的实例Camera.Parametersparameters=mCamera.getParameters();/设置预览相片的维度,需要考虑屏幕朝向parameterssetPreviewsize(mDisplayWidth,3*mDisplayHeight/4);/需要APILEVEL8paramet

6、erssetPreviewFormat(ImageFormatRGB_565);/设置成像格式一/设置camera的参数mCamerasetParameters(parameters);/开始捕获并显示帧mCamerastartPreview(); publicvoidsurfaceDestroyed(SurfaceHolderholder)if(mCamera!=null)/停止相机功能mCamerastopPreview();mPreviewRunning=false;/断开并释放camera实例,必须执行mCamerarelease();mCamera=null;6. 捕获照片给按钮加监

7、听,点击后调用publicfinalvoidtakePicture(nwra.ShuttarCallbackshutter,CamQra.PicturQCallbackra纠Canwra.PicturQCallbackjpeg)其中Camara.ShutterCallback是拍照完成后的回调动牝;CamQra.PictuwCallback是拍摄的未压缩原数据的回调动作,可以为nu;Camera.PictureCallback是对JPEG图像数据的回调动作。 按钮触发的函数:mCameratakePicture(mShutterCallback,null,mPictureCal丄back);

8、对JPEG图像数据的回调动作:PictureCallbackmPictureCallback=newPictureCallback()OverridepublicvoidonPictureTaken(bytedata.CameramCamera)Logv(nPictureCallback,H.onPictureTaken.H);if(data!=null)mBitmap=BitmapFactorydeoodeBytze&rrwy(data,0,data.length);/data只是图片的字节,利用BitmapFactory转化为位图/设置Imageview显示刚获得图片mImageView2

9、setlmageBitmap(mRevisedBitMap);mImageView2setVisibility(ViewVISIBLE);/设置Surfaceview为隐藏mSurfaceViewsetvisibility(ViewGONE);/停止相机获取实时图像if(mPreviewRunning)mCamerastopPreview();mPreviewRunning=false;;照相完成的回调动作ShutterCallbackmShutterCallback=newShutterCallback()publicvoidonShutter()/justlog9donothingLogv

10、(HShutterCallback,H.onShutter.n);;到此,己经可以显示出相机的实时画而。7. 图像的保存思路:1) 获取当前日期时间,作为文件名2) 判断SD卡是否存在,存在的话获得根日录位置3) 将位图压缩为JPEG格式,写进SD卡中SimpleDateFormatformatter=newSimpleDateFormatDatecurDate=newDate(System.currentTimeMillis();Stringstr=formatterformat(curDate);StringfileName=getSDPath()+H/H+str+Hjpeg;Filemy

11、CaptureFile=newFile(fileName);tryBufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(myCaptureFile);mRevisedBitMapcompress(BitmapCompressFormatJPEG,100,bos);bosflush();bosclose();catch(Exceptione)8. 切换前后摄像头(未测试)思路:1) 先跑判断系统的版本号2) 如果APl=9的话,再获得摄像头总数:=9)Camerainfocamerainfo=newCamerain

12、fo();for(inti=0;iCamera.getNumberOfCameras();i+)CameragetCameralnfo(i,cameralnfo);if(cameralnfofacing=CamerainfoCAMERA_FACING_FRONT)returni;return-1;/Nofront-facingcamerafoundelsereturn-1;9. 增加效果 相机自带9种效果,包括反光,黑白,红褐色等,使用方法:直接设置相机的parameters即可paramssetColorEffect(CameraParametersEFFECT_NEGATIVE); 为获取

13、更多的相机滤镜,需要自己编写查看了系统文档,发MrsetPreviewCallBackO,功能是为每一帧图像增加回调,处理并显基本思路:1) 给cantera设置setPzeviewCallBack2) 获得每帧的数据,解码为RGB编码3) 用新数据获得位图4) 对位图进行图像处理,反光等等5) 将处理后的位图显示在imageview在surfaceCreated函数中,cameraopen()以后力nA;mCamerasetPreviewCallback(mPreviewCallback);回调处理函数PreviewcallbackmPreviewCallback=newPreviewCal

14、lback()OverridepublicvoidonPreviewFrame(bytedata.Cameracamera)/TODOAuto-generatedmethodstubif(data!=null)CameraParametersparameters=cameragetParameters();parameterssetPreviewFrameRate(50);/设置每秒取的帧数intw=parametersgetPreviewSize()width;inth=parametersgetPreviewSize()height;Logd(TAG,HmPreviewCallbackw=n+w

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号