想在 Android 中制作照片,但它会自动将照片缩小到 160x160 像素

Want to make photo in Android, but it automatically downscales the photo to 160x160px

各位程序员大家好。我的问题:每次我拍照时,Android 会自动将其缩小到 160x160 像素。我不知道为什么。这是我的代码:

这里我设置了相机的所有首选项:

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

请帮助我。如果您需要更多信息,请提出要求。

"data"返回的实际上只是缩略图,而不是full-sized照片。无法通过这种方式获取 full-sized 图像,但您需要创建一个文件,相机会在其中为您保存图像。可以在标题 "Save the Full-size Photo".

下的 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);