1

ACTION_IMAGE_CAPTURE を使用してキャプチャした後、画像をフルサイズで保存する際に問題が発生しました。画像が非常に小さくなりました。解像度は 27X44 です。1.5 Android エミュレーターを使用しています。これがコードです。

myImageButton02.setOnClickListener
(
    new OnClickListener() 
    {
        @Override
        public void onClick(View v)
        {
            // create camera intent
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //Grant permission to the camera activity to write the photo.
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            //saving if there is EXTRA_OUTPUT
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File
            (Environment.getExternalStorageDirectory(), "testExtra" + String.valueOf
            (System.currentTimeMillis()) + ".jpg")));
            // start the camera intent and return the image
            startActivityForResult(intent,1); 
        } 
    }
);
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    // if Activity was canceled, display a Toast message
    if (resultCode == RESULT_CANCELED) 
    {
        Toast toast = Toast.makeText(this,"camera cancelled", 10000);
        toast.show();
        return;
    }

    // lets check if we are really dealing with a picture
    if (requestCode == 1 && resultCode == RESULT_OK)
    {
        String timestamp = Long.toString(System.currentTimeMillis());
        // get the picture
        Bitmap mPicture = (Bitmap) data.getExtras().get("data");
        // save image to gallery
        MediaStore.Images.Media.insertImage(getContentResolver(), mPicture, timestamp, timestamp);
    }
}
}
4

1 に答える 1

2

あなたがしていることを見てください:

  • 撮影したばかりの写真が保存されるパスを指定しますintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File (Environment.getExternalStorageDirectory(), "testExtra" + String.valueOf (System.currentTimeMillis()) + ".jpg")));
  • 画像にアクセスするときは、意図からデータを「ドラッグ」しますBitmap mPicture = (Bitmap) data.getExtras().get("data");

明らかに、そのファイルから画像にアクセスすることはありません。私の知る限り、インテントはアクティビティ間などで渡されるため、大量のデータを運ぶようには設計されていません。すべきことは、カメラ インテントによって作成されたファイルから画像を開くことです。そのように見えます:

BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();  
// Limit the filesize since 5MP pictures will kill you RAM  
bitmapOptions.inSampleSize = 6;  
imgBitmap = BitmapFactory.decodeFile(pathToPicture, bitmapOptions);

これでうまくいくはずです。以前はこの方法で動作していましたが、2.1 以降、いくつかのデバイスで問題が発生しています。Nexus One では (まだ) 正常に動作します。MediaStore.ACTION_IMAGE_CAPTURE
を見てください。

お役に立てれば。
よろしく、
ステフ

于 2010-05-07T08:37:41.153 に答える