5

カメラから画像をキャプチャし、圧縮してからSDカードに保存しようとしています。すぐ下のコードを使用してSDカードに直接保存すると、完全な画像が得られます。しかし、システムに画像をロードしようとすると、完全な5 mp画像ではなく、320x240などの非常に小さい画像サイズになります。

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    intent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());
    startActivityForResult(intent, CAMERA_PIC_REQUEST);  

getImageURI()は

    private Uri getImageUri() {
    // Store image in dcim
    file = new File(Environment.getExternalStorageDirectory() + "/DCIM","itshelp.jpg");
    imgUri = Uri.fromFile(file);
    file.deleteOnExit();
       Log.e("syS","file is at "+imgUri);
    return imgUri;
}

代わりに内部メモリに保存しようとすると、次のコードを使用して小さな画像を取得します。

    public void imageFromCamera() { //code to retrieve image
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivityForResult(intent, CAMERA_PIC_REQUEST);  
    }

そして、私のstartActivitForResultには、次のものがあります。

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
        Bitmap bm = (Bitmap) data.getExtras().get("data"); 
        Log.e("sys", "width is "+bm.getWidth()); //im gettting an extremely small width here

        OutputStream outStream = null;
        file = new File(Environment.getExternalStorageDirectory() + "/DCIM","itshelp.png");
        try {
         outStream = new FileOutputStream(file);
         bm.compress(Bitmap.CompressFormat.JPEG, 70, outStream);
         outStream.flush();
         outStream.close();

         Log.i("Hub", "OK, Image Saved to SD");
         Log.i("Hub", "height = "+ bm.getHeight() + ", width = " + bm.getWidth());

        } catch (FileNotFoundException e) {

         e.printStackTrace();
         Log.i("Hub", "FileNotFoundException: "+ e.toString());

        } catch (IOException e) {

         e.printStackTrace();
         Log.i("Hub", "IOException: "+ e.toString());
        }



    }
4

1 に答える 1

4

を使用せずにカメラ インテントを呼び出すと、MediaStore.EXTRA_OUTPUTインテント バンドルは大きなメモリ ブロックを渡すように設計されていないため、カメラは小さなサムネイルのみを返します。MediaStoreの SDK ドキュメントから:

カメラ アプリケーションで画像をキャプチャして返すために送信できる標準のインテント アクション。呼び出し元はEXTRA_OUTPUT、このイメージが書き込まれる場所を制御するためのエクストラを渡すことができます。が存在しない場合EXTRA_OUTPUT、小さいサイズの画像が追加フィールドの Bitmap オブジェクトとして返されます。これは、小さな画像のみが必要なアプリケーションに役立ちます。が存在する場合EXTRA_OUTPUT、フルサイズの画像が の Uri 値に書き込まれますEXTRA_OUTPUT

于 2011-09-06T20:56:46.767 に答える