在按钮上按下并保存图片

问题描述:

我正在创建一个Android应用程序,它使用用户捕获的图像作为更大过程的一部分。到目前为止,我的XML布局在RelativeLayout中有一个SurfaceView和Button。我已经设法让相机预览显示在SurfaceView上,但我坚持如何拍照并在用户按下按钮时保存。在按钮上按下并保存图片

我的类文件看起来像CameraPreview API演示: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

理想的情况下,当按下相机应该支持自动对焦,拍摄照片(与clicky声音),将其保存到/data/data/app_package_structure/files/file_name.jpg,然后在弹出按钮举起吐司,告诉用户他们的图像已被保存。

任何帮助是非常赞赏:)

我觉得CommonsWare真的已经回答了大部分这个问题,但是这可能对自动对焦和快门声音工作。这是一个猜测,因为我不在可以编译/测试任何这个的机器。

在您的按钮,按处理代码,我相信你应该调用(可能通过消息传递)

camera.autoFocus(new Camera.AutoFocusCallback() { 
    Camera.ShutterCallback shutterCallback = new Camera.ShutterCallback() { 
    public void onShutter() { 
     // Play your sound here. 
    } 
    }; 
    public void onAutoFocus(boolean success, Camera camera) { 
    camera.takePicture(shutterCallback, null, photoCallback); 
    } 
}); 

其中camera是你的相机对象,photoCallback是相同CommonsWare的例子。

究竟是什么,你坚持?

哦,不要忘记添加<uses-feature>标签android.hardware.camera.autofocus。 :)

+0

这是非常好的帮助。我的自动对焦现在工作得很好。我只是有一个障碍要克服,保存图片。 takePicture()返回什么,我在PhotoCallback中如何处理它,以及如何将结果保存为图像? – greenie 2010-05-07 15:40:04

+1

嗯,我的猜测是'takePicture'不会返回任何东西,而是通过'onPictureTaken(byte [] data,Camera camera)'回调方法将图片作为JPEG格式的字节数组传递给photoCallback。您可能只需将这些字节直接写入文件。 – 2010-05-11 17:12:47

+0

至少这是我的印象从http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html和http://developer.android.com/reference/android/hardware/Camera.html# takePicture%28android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback%29 – 2010-05-11 17:14:06

Here is a sample application处理该取一个画面并节省,它的一部分。自动对焦,点击,Toast,并保存到应用程序本地文件存储与SD卡作为练习留给学生。 :-)

+0

感谢您的sameple(我已经见过),但我真的找一个更完整的回答我的问题。 – greenie 2010-04-26 13:43:05

+0

@CommonsWare:只是一个更新 - 我是在开发商文档看SurfaceHolder,并规定该方法的setType已被弃用,因此是常数SURFACE_TYPE_PUSH_BUFFERS,SURFACE_TYPE_NORMAL,SURFACE_TYPE_HARDWARE和SURFACE_TYPE_GPU。 – Abhijit 2011-11-23 17:32:17

+0

@Abhijit:从Android 3.0开始,它们已被弃用。您需要Android 1.x和2.x.他们可以跳过Android 3.x及更高版本。 – CommonsWare 2011-11-23 17:35:50