同様の質問がありますが、私の特定の状況に一致するものはありません。decodeByteArrayデータからonPictureTakenコールバックが返されます。
私はカメラコントロールを公式tutorialで実装しています。
私が撮影する方法は、mCamera.takePicture(null, null, this)
を呼び出してから、onPictureTaken
からコールバックを受信することです。私が抱えている問題は、にデータが渡されているとは思われません。decodeByteArray
decodeByteArray
はnullを戻し続けます。バイト配列の形式が無効であるようです。
チュートリアルと同じようにFileOutputStream
を介してバイト配列を保存してから、decodeFile
を介して再びバイト配列を読み込み、それでもnullを返しました。例外をキャプチャしようとしましたが、捕まえられませんでした。
写真をうまく保存できることに注意してください。渡された引数からバイトを読み取ることができません。私はこれを理解できないようです。ここで
は私のコードです:
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
FileOutputStream out = null;
String fileName = Photo.getDirectory(this) + "/Confirm_" + mDateFormatter.format(new Date()) + ".jpg";
try
{
File temp = new File(fileName);
out = new FileOutputStream(temp);
out.write(data);
out.close();
try
{
// This always returns NULL
BitmapFactory.Options option = new BitmapFactory.Options();
option.inJustDecodeBounds = true;
option.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(fileName, option);
if(bitmap == null) ; // TRUE
}
catch(Exception e)
{
e.printStackTrace();
}
/*
Camera.Parameters param = mCamera.getParameters();
List<Camera.Size> sizes = param.getSupportedPictureSizes();
Bitmap bitmap = BitmapFactory.decodeFile(fileName);
for(Camera.Size s : sizes)
{
Log.i(PhotoApplication.TAG, "Size : " + s.width + " x " + s.height);
}
*/
Intent intent = new Intent();
intent.putExtra(EXTRA_FILENAME, temp.getAbsolutePath() + "/" + temp.getName());
setResult(RESULT_OK, intent);
Toast.makeText(this, "Saving as : " + temp.getAbsolutePath() + "/" + temp.getName(), Toast.LENGTH_LONG).show();
}
catch(FileNotFoundException e)
{
}
catch(IOException e)
{
}
finally
{
try
{
if(out != null)
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
finish();
}
これは私の顔を叩くものです。どうもありがとうございました! –