2

アプリケーションで使用CameraIntentしていますが、アプリの写真の解像度がSDカードに保存されている写真と異なります。

私は次のコードを使用しています:

            Intent mCameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            mCameraIntent.putExtra("android.intent.extras.CAMERA_FACING", 1);
            startActivityForResult(mCameraIntent, mCameraRequest);


        protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {
                if(requestCode == mCameraRequest)
                {
                    Bitmap photo = (Bitmap)data.getExtras().get("data");

                    int width = photo.getWidth();
                    int height = photo.getHeight();

                }
        }

幅の値は320、高さの値は200で、SDカードの写真の解像度は2592x1552です。写真のサイズを希望の解像度に変更するには、正確な幅と高さが必要です。私が間違っていることは何ですか?とが間違った値getWidth()getHeight()返していますか?

4

2 に答える 2

4

Bitmapで受け取るのはonActivityResultサムネイルです。

実際のファイルにアクセスしたい場合は、EXTRA_OUTPUTインテント エクストラで画像を保存する URI を指定する必要があります。

Intent mCameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
mCameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, outputUri);
mCameraIntent.putExtra("android.intent.extras.CAMERA_FACING", 1);
startActivityForResult(mCameraIntent, mCameraRequest);
于 2012-12-19T15:23:52.767 に答える
3

android.provider.MediaStore.ACTION_IMAGE_CAPTURE の javadoc から

/** The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. If
* the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap object    in
* the extra field. This is useful for applications that only need a small image. If the
* EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri value of
* EXTRA_OUTPUT.
**/

javadoc に記載されているように、小さな画像が表示されます。したがって、EXTRA_OUTPUT を使用し、SD カードに保存されているビットマップからサイズを取得することをお勧めします。(イメージのサイズのみを取得するには、BitmapFactory.Optionsを参照してください)

于 2012-12-19T15:24:38.860 に答える