0

camera.takePictureが呼び出された後、このコードを使用して SD にイメージを書き込みます。

protected String doInBackground(byte[]... jpeg) {
    File directory=new File(Environment.getExternalStorageDirectory() + "/" + getString(R.string.qpw_picture_path) + "/" + getString(R.string.qpw_picture_title) + "_" + initialTime);
    directory.mkdirs();
    String currentTime = new SimpleDateFormat(getString(R.string.qpw_date_format)).format(new Date());
    File photo = new File (directory, getString(R.string.qpw_picture_title) + "_" + currentTime + "_" + current + ".jpg");
    current++;

    if (photo.exists()) {
        photo.delete();
    }

    try {
        FileOutputStream fos=new FileOutputStream(photo.getPath());         
        fos.write(jpeg[0]);
        fos.flush();
        fos.close();
    }
    catch (java.io.IOException e) {
    }

    new ImageMediaScanner(getBaseContext(), photo);
    return(null);
}

この場合は正常に動作していますが、同じコードを使用して から画像を書き込んでcamera.setPreviewCallbackいると、使用できない、または開くことさえできない 450KB の破損した画像が SD に作成されます。

ヘルプやアドバイスをいただければ幸いです。

編集:

データを保存する前に、まず YUV から RGB に変換する必要があるようです。Google と SO で見つかった多くのコード サンプルの 1 つを試してみたところ、これ以上問題に直面することはありませんでした。

それを行う最善の方法を知っている人はいますか?速度、メモリ割り当て、CPU の面で...

4

1 に答える 1

0

誰かが同じ問題に遭遇した場合に備えて、この SO の投稿は、私が探していたものをよくまとめています。

于 2012-10-01T10:05:25.317 に答える