想要在Android中制作照片,但它会自动将照片缩小到160x160px

时间:2016-01-22 21:17:48

标签: android android-intent android-camera photo-gallery android-photos

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 ......我不知道为什么。

请帮帮我。如果您需要更多信息,请直接询问。

1 个答案:

答案 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);