生活随笔
收集整理的這篇文章主要介紹了
Android多媒体学习三:实现自己的Camera
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android自帶的Camera應用雖然可以滿足大多數情景,但是其靈活性上還有不足。但是Android允許我們定制自己的Camera。
在Android的hardware包中有一個Camera類。這個類就是獲取Camera服務的,可以定制Camera等。
可以通過open()方法獲取其實例。
在使用這個類是需要在AndroidManifest.xml文件中加入相應的權限和特性
?
如:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
等。
?
本文實例:
?
package?demo.camera; ?import?java.io.OutputStream; ?import?java.util.Iterator; ?import?java.util.List; ?import?android.app.Activity; ?import?android.content.ContentValues; ?import?android.content.res.Configuration; ?import?android.hardware.Camera; ?import?android.net.Uri; ?import?android.os.Bundle; ?import?android.provider.MediaStore; ?import?android.view.SurfaceHolder; ?import?android.view.SurfaceView; ?import?android.view.View; ?import?android.widget.LinearLayout; ?????????????public?class?MyCamera?extends?Activity?implements?SurfaceHolder.Callback,Camera.PictureCallback{ ????? ?????public?static?final?int?MAX_WIDTH?=?200; ?????public?static?final?int?MAX_HEIGHT?=?200; ????? ?????private?SurfaceView?surfaceView; ????? ?????private?Camera?camera;?????? ?????public?void?onCreate(Bundle?savedInstanceState){ ?????????super.onCreate(savedInstanceState); ?????????this.setContentView(R.layout.camera); ?????????surfaceView?=?(SurfaceView)this.findViewById(R.id.myCameraView); ?????????surfaceView.setFocusable(true);? ?????????surfaceView.setFocusableInTouchMode(true); ?????????surfaceView.setClickable(true); ?????????surfaceView.setOnClickListener(new?View.OnClickListener()?{ ????????????? ?????????????@Override?????????????public?void?onClick(View?v)?{ ????????????????? ?????????????????camera.takePicture(null,?null,?null,?MyCamera.this); ????????????????? ?????????????} ?????????}); ??????????????????SurfaceHolder?holder?=?surfaceView.getHolder(); ???????????????????????????holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ?????????holder.addCallback(this); ?????} ?????@Override?????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,?int?w,?int?h)?{ ?????} ?????@Override?????public?void?surfaceCreated(SurfaceHolder?holder)?{ ???????????????????????????camera?=?Camera.open();?????? ????????? ????????????????????????try?{ ????????????? ?????????????Camera.Parameters?param?=?camera.getParameters(); ?????????????if(this.getResources().getConfiguration().orientation?!=?Configuration.ORIENTATION_LANDSCAPE){ ??????????????????????????????????param.set("orientation",?"portrait"); ???????????????????????????????????????????????}else{ ?????????????????param.set("orientation",?"landscape"); ???????????????????????????????????????????????} ??????????????????????????List<String>?colorEffects?=?param.getSupportedColorEffects(); ?????????????Iterator<String>?colorItor?=?colorEffects.iterator(); ?????????????while(colorItor.hasNext()){ ?????????????????String?currColor?=?colorItor.next(); ?????????????????if(currColor.equals(Camera.Parameters.EFFECT_SOLARIZE)){ ?????????????????????param.setColorEffect(Camera.Parameters.EFFECT_SOLARIZE); ?????????????????????break; ?????????????????} ?????????????} ??????????????????????????camera.setParameters(param); ????????????? ?????????????camera.setPreviewDisplay(holder); ????????????? ????????????????????????????????int?bestWidth?=?0; ?????????????int?bestHeight?=?0; ????????????? ?????????????List<Camera.Size>?sizeList?=?param.getSupportedPreviewSizes(); ??????????????????????????if(sizeList.size()?>?1){ ?????????????????Iterator<Camera.Size>?itor?=?sizeList.iterator(); ?????????????????while(itor.hasNext()){ ?????????????????????Camera.Size?cur?=?itor.next(); ?????????????????????if(cur.width?>?bestWidth?&&?cur.height>bestHeight?&&?cur.width?<MAX_WIDTH?&&?cur.height?<?MAX_HEIGHT){ ?????????????????????????bestWidth?=?cur.width; ?????????????????????????bestHeight?=?cur.height; ?????????????????????} ?????????????????} ?????????????????if(bestWidth?!=?0?&&?bestHeight?!=?0){ ?????????????????????param.setPreviewSize(bestWidth,?bestHeight); ??????????????????????????????????????????surfaceView.setLayoutParams(new?LinearLayout.LayoutParams(bestWidth,?bestHeight)); ?????????????????} ?????????????} ?????????????camera.setParameters(param); ?????????}?catch?(Exception?e)?{ ??????????????????????????camera.release(); ?????????} ????????? ??????????????????camera.startPreview(); ????????? ?????} ?????@Override?????public?void?surfaceDestroyed(SurfaceHolder?holder)?{ ???????????????????????????camera.stopPreview(); ?????????camera.release(); ????????? ?????} ?????@Override?????public?void?onPictureTaken(byte[]?data,?Camera?camera)?{ ????????????????????????????????????Uri?p_w_picpathUri?=?this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,?new?ContentValues()); ?????????try?{ ?????????????OutputStream?os?=?this.getContentResolver().openOutputStream(p_w_picpathUri); ?????????????os.write(data); ?????????????os.flush(); ?????????????os.close(); ?????????}?catch?(Exception?e)?{ ??????????????????????????e.printStackTrace(); ?????????} ????????? ?????????camera.startPreview(); ?????} ????? ????? ????? ?} ? ?
轉載于:https://blog.51cto.com/whatandroid/987100
總結
以上是生活随笔為你收集整理的Android多媒体学习三:实现自己的Camera的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。