1

AndroidCameraIntentを使用して画像をキャプチャしようとしています。カメラインテントはバイト配列を返し、バイト配列をビットマップとして保存すると、現在のカメラ設定(現在Androidモバイルカメラに設定されている1024ピクセル)に基づいて画像を取得する代わりに、非常に小さい画像を取得しています。

通常、カメラインテントからファイルパスを取得しますが、どういうわけかこのデバイスから取得していないため、カメラインテントから返されたバイトからビットマップを作成しています。

これがなぜであり、この問題を解決する方法を誰もが知っています。ありがとう。

以下は私が使用しているJavaコードブロックです。

プライベートインテントcameraIntent=null;

public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);

cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
                                super.onActivityResult(requestCode, resultCode, data);

if (requestCode == CAMERA_PIC_REQUEST) {  
    if (resultCode == RESULT_OK) {
      if ( data != null)
        {
           Bitmap myImage = null;
           Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100,stream);
           byte[] byteArray = stream.toByteArray();
           BitmapFactory.Options options = new BitmapFactory.Options();
           myImage = BitmapFactory.decodeByteArray(byteArray, 0,byteArray.length, options);
           fileOutputStream = new FileOutputStream(sPath);
           BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
           myImage.compress(CompressFormat.JPEG, 100, bos);
           bos.flush();
           bos.close();
        }
    }
}
}
4

1 に答える 1

0

data.getExtras("data")サムネイル画像のみを返します。フルサイズの画像を取得するには、その画像を保存して後で取得するためのファイルをカメラ インテントに渡す必要があります。以下に大まかな例を示します。

インテントを開始します。

File dir = new File(Environment.getExternalStorageDirectory() + "/dcim/myappname");
File mFile = File.createTempFile("myImage", ".png", dir);

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mFile));
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

内部onActivityResult:

if (resultCode == RESULT_OK) {
   Bitmap bm = BitmapFactory.decodeFile(mFile.getAbsolutePath());
}
// do whatever you need with the Bitmap

mFile は、必要に応じて呼び出すことができるように、グローバルにするか、何らかの方法で永続化する必要があることに注意してください。

于 2013-10-09T22:18:34.083 に答える