0

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番目のケースであれば、私の仕事は正しいと思います。それが最初のケースだった場合、誰かが私を正しい方向に導くことができますか. これを行う簡単な方法はありますか、それともロックを使用して関数が正しい順序で実行されるようにする必要がありますか?

ありがとうございました

4

1 に答える 1

1

onPictureTaken()の外部に新しいメソッドを追加する必要はありません。Capturedで画像を取得した後、onPictureTaken()メソッドからbyte []を取得します。これは、画像のbyte[]を取得する場所です。したがって、byte[]をビットマップに変換できます。また、キャプチャされた画像のbyte[]を取得するために以下のスニペットを使用できます

private PictureCallback mPicture = new PictureCallback() {

    @Override
    public void onPictureTaken(final byte[] data, Camera camera) {
        createBitmap(data); // Some stuffs to convert byte[] to Bitmap
    }
};
于 2012-04-24T06:44:56.863 に答える