当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 简单的照相机程序的实例代码

Android 简单的照相机程序的实例代码

2019年07月24日  | 移动技术网移动技术  | 我要评论

复制代码 代码如下:

class surface extends surfaceview implements surfaceholder.callback {

         surfaceholder sfholder;

         camera camera;

         bitmap bitmap;

         public surface(context context) {
             super(context);
             // todo auto-generated constructor stub

             sfholder = getholder();
             sfholder.addcallback(this);
             sfholder.settype(surfaceholder.surface_type_push_buffers);
         }

         public void surfacechanged(surfaceholder holder, int format, int width,
                 int height) {
             // todo auto-generated method stub
              camera.parameters parameters = camera.getparameters();
             parameters.setpictureformat(pixelformat.jpeg);
             parameters.setpreviewsize(320, 480);
             parameters.setpicturesize(320, 480);
             camera.setparameters(parameters);
              camera.startpreview();
         }

         public void surfacecreated(surfaceholder holder) {
             // todo auto-generated method stub

             try {
                 camera = camera.open();
                 camera.setpreviewdisplay(sfholder);
             } catch (exception e) {
                 camera.release();
                 camera = null;
             }
         }

         public void surfacedestroyed(surfaceholder holder) {
             // todo auto-generated method stub
              camera.stoppreview();
             camera = null;

         }
         //拍照
         public void takepicture()
         {
             if (camera != null)
             {
                 camera.takepicture(null, null, jpegcallback);
             }
         }

         //拍照并且保存的回调函数

         private picturecallback jpegcallback = new picturecallback() {

             public void onpicturetaken(byte[] data, camera camera) {
                 // todo auto-generated method stub
                 try
                 {
                 bitmap = bitmapfactory.decodebytearray(data, 0, data.length);
                 file file = new file("/sdcard/camera1.jpg");
                 bufferedoutputstream bos = new bufferedoutputstream(new fileoutputstream(file));
                 bitmap.compress(bitmap.compressformat.jpeg, 80, bos);
                 bos.flush();
                 bos.close();
                 canvas  canvas= sfholder.lockcanvas();
                 canvas.drawbitmap(bitmap, 0,0, null);
                 sfholder.unlockcanvasandpost(canvas);
                 }
                 catch(exception e)
                 {
                     e.printstacktrace();
                 }
             }
         }
     }

这个是一个拍照的类,使用的是surfaceview来实现的,如果想要在一部分上显示,并且使用按钮操作的话,可以修改一下这个类,而且这个是拍照之后停留在拍照页面的,如果需要在拍照后不停留在拍照页面的,可以自行修改和添加参数。


此程序也演示了,如何在拍完照之后,将照片保存到sd卡上。

实际使用时的操作如何,使用的是按键进行拍照的,其实也可以改为使用按钮进行拍照的,只要对这个类进行简单的修改即可。调用如下:

复制代码 代码如下:

@override
    public boolean onkeydown(int keycode, keyevent event) {
        // todo auto-generated method stub
        if (keycode == keyevent.keycode_dpad_center)
            sf.takepicture();
        return super.onkeydown(keycode, event);
    }

要使用相机和操作sd卡,则需要添加以下权限:

复制代码 代码如下:

android:name="android.permission.write_external_storage">

第一条是可以使用扩展存储设备的权限

第二条是可以使用照相机设备

如果没有这两条权限的话,会报错,具体错误可以在ddms中查看 。欢迎交流!

希望对大家有所帮助 !

此平台使用提android2.2 v8的系统,如果使用1.5或者是其它的,权限可能会不一样!

当然更好的方法是首先检查sd卡是否存在,此程序中没有进行检测,因为我只是在练习相机的使用。

检测代码如下:

复制代码 代码如下:

if (environment.getexternalstoragestate().equals(android.os.environment.media_mounted)) {
         file    sdcardpath = environment.getexternalstoragedirectory();
            settitle(sdcardpath.getname()); //将sd卡路径名字设置为标题,只是为了让大家看的更明白些
        } else {
            toast.maketext(recordtest.this, "没有sd卡", 1000).show();
        }

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网