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

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();

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值