返回顶部
首页 > 资讯 > 精选 >Android中如何使用照相机
  • 251
分享到

Android中如何使用照相机

android 2023-05-30 21:05:25 251人浏览 八月长安
摘要

Android中如何使用照相机,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 照相机的实例应用SurfaceHolder.Callbackpublic 

Android中如何使用照相机,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Android 照相机的实例应用

SurfaceHolder.Callback

public class MyCameraDemo extends Activity {   private SurfaceView surface = null ;   private Button but = null ;   private SurfaceHolder holder = null ;   private Camera cam = null ;   private boolean previewRunning = true ;   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     super.setContentView(R.layout.main);     this.but = (Button) super.findViewById(R.id.but) ;     this.surface = (SurfaceView) super.findViewById(R.id.surface) ;          this.holder = this.surface.getHolder() ;     this.holder.addCallback(new MySurfaceViewCallback()) ;     //设置缓冲类型     this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) ;     //设置分辨率     this.holder.setFixedSize(600, 350);          this.but.setOnClickListener(new OnClickListenerImpl()) ;   }   private class OnClickListenerImpl implements OnClickListener {      @Override     public void onClick(View v) {       if(MyCameraDemo.this.cam != null) {         //自动对焦         MyCameraDemo.this.cam.autoFocus(new AutoFocusCallbackImpl()) ;       }     }        }      private class MySurfaceViewCallback implements SurfaceHolder.Callback {      //当预览界面格式大小改变时,调用     public void surfaceChanged(SurfaceHolder holder, int fORMat, int width,         int height) {            }      //初次实例化界面调用     public void surfaceCreated(SurfaceHolder holder) {       MyCameraDemo.this.cam = Camera.open(0) ;  // 取得第一个摄像头       //窗口服务       WindowManager manager = (WindowManager) MyCameraDemo.this           .getSystemService(Context.WINDOW_SERVICE);       //取得display显示对象       Display display = manager.getDefaultDisplay() ;       //照相机参数       Parameters param = MyCameraDemo.this.cam.getParameters() ;       //将照相机预览大小设置为display大小       param.setPreviewSize(display.getWidth(), display.getHeight()) ;       param.setPreviewFrameRate(5) ; // 一秒5帧       param.setPictureFormat(PixelFormat.JPEG) ; // 图片形式       param.set("jpen-quality", 80) ;//图片质量,最高100       MyCameraDemo.this.cam.setParameters(param) ;       try {         MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder) ;       } catch (ioException e) {       }       MyCameraDemo.this.cam.startPreview() ; // 进行预览       MyCameraDemo.this.previewRunning = true ;  // 已经开始预览     }      @Override     public void surfaceDestroyed(SurfaceHolder holder) {       if(MyCameraDemo.this.cam != null) {         if(MyCameraDemo.this.previewRunning) {           MyCameraDemo.this.cam.stopPreview() ;  // 停止预览           MyCameraDemo.this.previewRunning = false ;         }         MyCameraDemo.this.cam.release() ;       }     }        }      private class AutoFocusCallbackImpl implements AutoFocusCallback {      @Override     public void onAutoFocus(boolean success, Camera camera) {       if(success) {  // 成功         MyCameraDemo.this.cam.takePicture(sc, pc, jpGCall) ;       }     }        }      private PictureCallback jpgcall = new PictureCallback() {      @Override     public void onPictureTaken(byte[] data, Camera camera) {  // 保存图片的操作       Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);       String fileName = Environment.getExternalStorageDirectory()           .toString()           + File.separator           + "mldnphoto"           + File.separator           + "MLDN_" + System.currentTimeMillis() + ".jpg";       File file = new File(fileName) ;       if (!file.getParentFile().exists()) {         file.getParentFile().mkdirs() ; // 创建文件夹       }       try {         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)) ;         bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos) ; // 向缓冲区之中压缩图片         bos.flush() ;         bos.close() ;         Toast.makeText(MyCameraDemo.this,             "拍照成功,照片已保存在" + fileName + "文件之中!", Toast.LENGTH_SHORT)             .show();       } catch (Exception e) {         Toast.makeText(MyCameraDemo.this,             "拍照失败!", Toast.LENGTH_SHORT)             .show();       }       MyCameraDemo.this.cam.stopPreview() ;       MyCameraDemo.this.cam.startPreview() ;     }        } ;      private ShutterCallback sc = new ShutterCallback(){     @Override     public void onShutter() {       // 按下快门之后进行的操作     }   } ;   private PictureCallback pc = new PictureCallback() {      @Override     public void onPictureTaken(byte[] data, Camera camera) {            }        } ; }

 主布局函数

<?xml version="1.0" encoding="utf-8"?> <LinearLayout    xmlns:android="Http://schemas.android.com/apk/res/android"   android:orientation="vertical"    android:layout_width="fill_parent"   android:layout_height="fill_parent">   <Button     android:id="@+id/but"      android:layout_width="fill_parent"     android:layout_height="wrap_content"      android:text="照相" />   <SurfaceView     android:id="@+id/surface"     android:layout_width="fill_parent"     android:layout_height="fill_parent" />  </LinearLayout>

看完上述内容,你们掌握Android中如何使用照相机的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Android中如何使用照相机

本文链接: https://lsjlt.com/news/221325.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作