Androidカメラアプリケーション用の簡単な写真撮影クラスがあります:
public class SimplePicture implements Picturable, PictureCallback{
Camera camera;
byte[] imgData; // image data in bytes
/**
*@param c, the camera instance that the Android phone is using.
*/
public SimplePicture(Camera c){
this.camera = c;
}
public byte[] getPicture(int exposureCompensation) {
// TODO Auto-generated method stub
Parameters p = camera.getParameters();
p.setExposureCompensation(exposureCompensation);
if(p.getMaxExposureCompensation() > 0){ // if exposure is supported
camera.takePicture(null, this, this);
}
return imgData;
}
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
imgData = data;
}
}
ご覧のとおり、取得した画像のバイトを返すように getPicture() メソッドを使用しようとしています。コールバックは imageData へのアクセスを許可する唯一の関数であるため、写真を撮った後に画像データの準備が整ったときにコールバック関数が呼び出されることがわかっています。onPictureTaken 関数は getPicture 関数と同時に実行されるので、バイト配列を正しく設定する前に戻り関数 (imgData を返す) が戻りますか? または、実行は onPictureTaken 呼び出しを待ってから戻りますか?
2番目のケースであれば、私の仕事は正しいと思います。それが最初のケースだった場合、誰かが私を正しい方向に導くことができますか. これを行う簡単な方法はありますか、それともロックを使用して関数が正しい順序で実行されるようにする必要がありますか?
ありがとうございました