2010-04-26 65 views
10

我正在創建一個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,然後在彈出按鈕舉起吐司,告訴用戶他們的圖像已被保存。

任何幫助是非常讚賞:)

回答

12

我覺得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

9

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