我遇到了問題卡住的問題camera.takePicture()
在所需圖片尺寸較高的情況下,jpeg回調調用的頻率較低。例如。它總是以640x480成功,但僅適用於5%至40%的情況,並且參數調整較小,分辨率爲3264x2448。 相關代碼:相機takePicture並不總是根據圖片尺寸進行jpeg回調
public void foo(View view) {
Camera.PictureCallback jpegCallback = new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] bytes, Camera camera) {
camera.release();
Toast.makeText(SurvCamActivity.getInstance(), "jpeg callback", Toast.LENGTH_SHORT).show();
}
};
//Gets desired resolution
SpinnerResolution res = getSelectedSpinnerResolution();
Camera camera = getCameraInstance();
try {
Camera.Parameters params = camera.getParameters();
params.setPictureSize(res.width, res.height);
camera.setParameters(params);
camera.setPreviewTexture(new SurfaceTexture(R.layout.fragment_preview));
camera.startPreview();
camera.takePicture(null, null, jpegCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
現在奇怪的事情是,如果我添加斷點camera.takePicture()
,一旦線程到達那裏總是調用JPEG回調只是恢復執行。當我在camera.takePicture()
之後加入Thread.sleep(700)
時,它也開始始終如一地進行回調。有任何想法嗎?在Nexus 4上測試。
什麼是調用'foo()'的邏輯?你不能在'jpegCallback.onPictureTaken()'開始之前在'foo()'中調用'camera.takePicture()'。 –
foo是按鈕onclick函數 – user3227998