2

CameraIntent在我的应用程序中使用,但应用程序中的照片与保存在 SDCard 上的照片的分辨率不同。

我正在使用以下代码:

            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();

                }
        }

width 的值为 320,height 的值为 200,在 SDCard 上照片的分辨率为 2592x1552。我需要确切的宽度和高度才能将照片调整为所需的分辨率。我做错了什么?getWidth()getHeight()返回错误的值还是?

4

2 回答 2

4

Bitmap您收到的是onActivityResult缩略图。

如果您想访问实际文件,您应该提供希望保存图像的 URI,并带有EXTRA_OUTPUT意图额外:

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 并从存储在 sdcard 上的位图中获取大小。(请参阅BitmapFactory.Options仅获取图像的大小)

于 2012-12-19T15:24:38.860 回答