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

4
回复
907
查看
[复制链接]

579

主题

1314

帖子

3260

安币

手工艺人

发表于 2018-2-26 10:06:52 | 显示全部楼层 |阅读模式

            

        复制代码 代码如下: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卡是否存在,此程序中没有进行检测,因为我只是在练习相机的使用。

        检测代码如下:



        

0

主题

9424

帖子

2412

安币

Android大神

Rank: 6Rank: 6

发表于 2018-2-26 21:27:57 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

350

主题

1010

帖子

784

安币

手工艺人

发表于 2018-2-28 06:32:40 | 显示全部楼层
不错不错,楼主辛苦了。。。

0

主题

9184

帖子

2379

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-1 06:15:27 | 显示全部楼层
每次我都积极回帖的,想要安币~

7

主题

9605

帖子

1969

安币

Android大神

Rank: 6Rank: 6

发表于 2018-3-2 02:53:32 | 显示全部楼层
每次我都积极回帖的,想要安币~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )