【Android源码 栏目提醒】:以下是网学会员为您推荐的Android源码 -Android手机拍照功能源码 - 企业软件开发,希望本篇文章对您学习有所帮助。
随着手机技术的快速发展手机的功能越来越多也越来越完善现代手机的一个非常重要的功能就是使用内置相机进行拍照甚至录制视频这也是很多手机爱好者购机时必考虑的因素。
然而对于
Android学习者来说如何实现手机拍照功能呢下面将为大家提供一个简单的例子来让大家了解如何使用
Android的Camera类捕捉图像并将图像保存为文件。
这个例子比较简单涉及到一个MainActivity及main.xml布局文件我已经在我的手机上测试过了暂时没发现什么问题我的版本是
Android1.5的对于这些设置以及程序中的一些设置大家可以根据自己的需要进行设置即可这只是一个简单的例子大家可以根据自己的需要进行设计与完善。
代码如下-------------------------MainActivity-------------------------package cn.com.panimport java.io.Fileimport java.io.FileOutputStreamimport java.io.IOExceptionimport
android.app.Activityimport
android.content.Contextimport
android.graphics.Bitmapimport
android.graphics.BitmapFactoryimport
android.graphics.PixelFormatimport
android.graphics.Bitmap.CompressFormatimport
android.hardware.Cameraimport
android.hardware.Camera.PictureCallbackimport
android.os.Bundleimport
android.os.Environmentimport
android.util.Logimport
android.view.Displayimport
android.view.KeyEventimport
android.view.SurfaceHolderimport
android.view.SurfaceViewimport
android.view.Windowimport
android.view.WindowManagerpublic class MainActivity extends Activity private static final String TAG TakeActivityprivate SurfaceView surfaceViewprivate Camera cameraprivate boolean previewOverridepublic void onCreateBundle savedInstanceState super.onCreatesavedInstanceStateWindow window getWindowrequestWindowFeatureWindow.FEATURE_NO_TITLE// 没有标题window.setFlagsWindowManager.LayoutParams.FLAG_FULLSCREENWindowManager.LayoutParams.FLAG_FULLSCREEN// 设置全屏window.addFlagsWindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON// 高亮setContentViewR.layout.mainsurfaceView SurfaceView this.findViewByIdR.id.surfaceViewsurfaceView.getHolder.setFixedSize176 144 // 设置分辨率// 下面设置Surface不维护自己的缓冲区而是等待屏幕的渲染引擎将内容推送到用户面前surfaceView.getHolder.setTypeSurfaceHolder.SURFACE_TYPE_PUSH_BUFFERSsurfaceView.getHolder.addCallbacknew SurfaceCallbackprivate final class SurfaceCallback implements SurfaceHolder.Callback Overridepublic void surfaceChangedSurfaceHolder holder int format int widthint height Overridepublic void surfaceCreatedSurfaceHolder holder try camera Camera.openWindowManager wm WindowManager getSystemServiceContext.WINDOW_SERVICEDisplay display wm.getDefaultDisplayCamera.Parameters parameters camera.getParametersparameters.setPreviewSizedisplay.getWidthdisplay.getHeight// 设置预览照片的大小parameters.setPreviewFrameRate3// 每秒3帧parameters.setPictureFormatPixelFormat.JPEG// 设置照片的输出格式parameters.setjpeg-quality 85// 照片质量parameters.setPictureSizedisplay.getWidthdisplay.getHeight// 设置照片的大小camera.setParametersparameterscamera.setPreviewDisplaysurfaceView.getHolder// 通过SurfaceView显示取景画面camera.startPreview// 开始预览preview true catch IOException e Log.eTAG e.toStringOverridepublic void surfaceDestroyedSurfaceHolder holder if camera null if previewcamera.stopPreviewcamera.releaseOverridepublic boolean onKeyDownint keyCode KeyEvent event if camera null event.getRepeatCount 0 switch keyCode case KeyEvent.KEYCODE_SEARCH:camera.autoFocusnull// 自动对焦breakcase KeyEvent.KEYCODE_CAMERA:case KeyEvent.KEYCODE_DPAD_CENTER:camera.takePicturenull null new TakePictureCallbackbreakreturn trueprivate final class TakePictureCallback implements PictureCallback Overridepublic void onPictureTakenbyte data Camera camera try Bitmap bitmap BitmapFactory.decodeByteArraydata 0data.lengthFile file new FileEnvironment.getExternalStorageDirectorySystem.currentTimeMillis .jpgFileOutputStream outStream new FileOutputStreamfilebitmap.compressCompressFormat.JPEG 100 outStreamoutStream.closecamera.stopPreviewcamera.startPreview// 开始预览 catch Exception e Log.eTAG e.toString---------------------------main.xml----------------------------------------------AndroidManifest.xml----------------------