意图只从后置摄像头获取图像

时间:2017-01-05 11:57:46

标签: android android-intent android-camera android-image

我的应用程序应该从图库中获取图片并将其显示在ImageView中,我得到了我想要的所有图片,除了我带的<强大的>后置摄像头,他们出现在画廊让我挑选甚至返回路径,但我得到的只是ImageView中的空白。

这是代码:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_PICK);
startActivityForResult(intent, SELECT_PICTURE);

我的onActivityResult代码是这样的:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SELECT_PICTURE && resultCode == RESULT_OK && null != data) {
        Uri uri = data.getData();

        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
            ImageView iv = (ImageView) getView().findViewById(R.id.iv_foto);
            iv.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

适用于使用前置摄像头拍摄的图像。

我没有在另一部手机上试过这个应用程序,但如果这种情况发生在我的手机上,很可能其他人会遇到同样的问题。

3 个答案:

答案 0 :(得分:1)

原因是我认为记忆超出了指数。 请参阅此链接Compress camera image before upload,您可以参加

答案 1 :(得分:1)

问题在于图像的大小。

Bitmap

中显示之前,我已成功解决了ImageView缩放问题的问题
Bitmap sourceBitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri);

try {
        Bitmap sourceBitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri);

        float rotationInDegrees = 0;

        Cursor cursor = contentResolver.query(uri, new String[]{MediaStore.Images.ImageColumns.ORIENTATION},
                null,
                null,
                null);

        if (cursor != null && cursor.moveToFirst()) {
            int col = cursor.getColumnIndex(MediaStore.Images.ImageColumns.ORIENTATION);
            if (col != -1)
                rotationInDegrees = cursor.getInt(col);
            cursor.close();
        }

        Matrix matrix = new Matrix();
        matrix.preRotate(rotationInDegrees);

        int width, height;
        double aspectRatio;
        aspectRatio = (double) sourceBitmap.getWidth() / sourceBitmap.getHeight();
        if (sourceBitmap.getHeight() > sourceBitmap.getWidth()) {
            height = MAX_IMAGE_DIMENSION;
            width = (int) (height * aspectRatio);
        } else {
            width = MAX_IMAGE_DIMENSION;
            height = (int) (width / aspectRatio);
        }
        sourceBitmap = Bitmap.createScaledBitmap(sourceBitmap, width, height, false);

        return Bitmap.createBitmap(sourceBitmap, 0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight(), matrix, false);

} catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException("ImageHelper@getImageFromUri: IOException");
}

答案 2 :(得分:0)

即使在压缩之后如果你无法获得它,那么尝试使用一些库从图库中挑选图像。