Hello其他程序员。我的问题:每次拍照时,Android都会自动将其缩小到160x160px。我不知道为什么。这是我的代码:
在这里,我设置了相机的所有首选项:
public void ChosenPhoto(String extra) {
String gallery = "gallery";
String camera = "camera";
if (extra.equals(gallery)) {
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("return-data", true);
intent.putExtra("aspectX", 560);
intent.putExtra("aspectY", 560);
intent.putExtra("outputX", 560);
intent.putExtra("outputY", 560);
intent.putExtra("noFaceDetection", true);
intent.putExtra("screenOrientation", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, PICK_FROM_GALLERY);
} else if (extra.equals(camera)) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 560);
intent.putExtra("aspectY", 560);
intent.putExtra("outputX", 560);
intent.putExtra("outputY", 560);
intent.putExtra("noFaceDetection", true);
intent.putExtra("screenOrientation", ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
}
}
我稍后会在这里使用它:
Bundle extras = data.getExtras();
photoBit = extras.getParcelable("data");
ByteArrayOutputStream PhotoStream = new ByteArrayOutputStream();
photoBit.compress(Bitmap.CompressFormat.PNG, 100, PhotoStream);
photos = PhotoStream.toByteArray();
Log.e(TAG, "Width:" + photoBit.getWidth() );
ImageView.setImageBitmap(photoBit);
在ImageView中,我后来看到它缩小了。更精确:每次都是160x160px ......我不知道为什么。
请帮帮我。如果您需要更多信息,请直接询问。
答案 0 :(得分:2)
“数据”中返回的内容实际上只是缩略图而不是完整尺寸的照片。无法以这种方式获取全尺寸图像,但您需要创建一个文件,相机将在其中为您保存。有关解释的工作示例可以在标题为“保存全尺寸照片”的http://developer.android.com/training/camera/photobasics.html下找到。
首先,您需要创建一个用于存储图像的新文件。您可能希望确保文件名不会与其他文件冲突(附加时间戳)。
File file = new File(context.getExternalFilesDir( null ), "photo.jpg");
然后在意图中指定:
intent.putExtra( MediaStore.EXTRA_OUTPUT, Uri.fromFile( file ) );
activity.startActivityForResult( intent, REQUEST_TAKE_PHOTO );
在onActivityResult()中,您将检查照片是否实际拍摄。您将使用之前已创建的File实例,现在具有该图像。
if ( ( requestCode == REQUEST_TAKE_PHOTO ) && ( resultCode == RESULT_OK ) ) {
如果要将文件中的图像放入ImageView,可以执行以下操作:
Bitmap bmp = BitmapFactory.decodeFile( file.getAbsolutePath() );
imageView.setImageBitmap(bmp);