Android 照相机返回小图片
我正在用相机拍摄一张照片。这是我的代码,非常有效:Android 照相机返回小图片,android,android-intent,bitmap,android-camera,Android,Android Intent,Bitmap,Android Camera,我正在用相机拍摄一张照片。这是我的代码,非常有效: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUES
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
我的onActivityResult如下所示:
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap photo = (Bitmap) extras.get("data");
}
}
问题是,虽然相机拍摄的照片是480*800(我使用的是HTC Desire),但返回的位图只有194*324
知道为什么会发生这种情况以及如何解决吗
谢谢 阅读此答案以获得完整的图像大小
当您使用从extra读取
位图时,您将获得图像的缩略图我也有同样的问题,我在谷歌安卓网站上找到了一个例子:如果我们想从
照相机活动我们别无选择,只能将其保存到文件中,然后使用:
因此,首先,与前面一样,我们需要创建一个静态int,作为我们的请求代码:
公共静态最终整数捕获\图像\全尺寸\活动\请求\代码=
1777;
接下来,我们再次激发启动活动以获得结果的意图:
Intent Intent=新的Intent(“android.media.action.IMAGE_-CAPTURE”);文件
文件=新
文件(Environment.getExternalStorageDirectory()+File.separator+
“image.jpg”);intent.putExtra(MediaStore.EXTRA_输出,
fromFile(file));startActivityForResult(意向,
捕获(图像、全尺寸、活动、请求、代码)
在这里,我们实际上是传递一个URI作为额外的目的,以保存图像
最后,我们将在onActivityResult中收到结果:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
//Check that request code matches ours:
if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE)
{
//Get our saved file into a bitmap object:
File file = new File(Environment.getExternalStorageDirectory()+File.separator +
"image.jpg");
Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700);
}
}
decodeSampledBitmapFromFile方法是:
public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight)
{ // BEST QUALITY MATCH
//First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
// Calculate inSampleSize, Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
options.inPreferredConfig = Bitmap.Config.RGB_565;
int inSampleSize = 1;
if (height > reqHeight)
{
inSampleSize = Math.round((float)height / (float)reqHeight);
}
int expectedWidth = width / inSampleSize;
if (expectedWidth > reqWidth)
{
//if(Math.round((float)width / (float)reqWidth) > inSampleSize) // If bigger SampSize..
inSampleSize = Math.round((float)width / (float)reqWidth);
}
options.inSampleSize = inSampleSize;
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(path, options);
}
将相关相机权限添加到清单文件:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
希望它能帮助任何人解决这个问题。因为它对我100%有效。我遵循了它,并没有成功地将图像存储到gallery。但存储的图像质量也很差。。如何获得好的质量?