毕加索无法从Uri加载位图-ImageView显示为黑色视图

时间:2018-06-29 07:51:21

标签: android android-camera picasso

我正在使用自定义相机,当用户单击相机按钮时,它应调用此方法。 data参数是以字节为单位拍摄的图像。我希望此方法可以从图像中生成位图,将其放入捆绑包中,然后将该捆绑包放入将显示图像的片段中。这是从我的Camera.PictureCallback中调用的。

public static void displayCameraImage(byte[] data) {
    BitmapFactory.Options scalingOptions = new BitmapFactory.Options();
    final Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length, scalingOptions);
    FragmentTransaction fragmentTransaction = activity.getSupportFragmentManager().beginTransaction();
    Fragment displayImageFragment = new DisplayImageFragment();
    Bundle bundle = new Bundle();
    bundle.putParcelable("image", bmp);
    displayImageFragment.setArguments(bundle);
    fragmentTransaction.add(R.id.flMainContainer, displayImageFragment, "confirmselfie");
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

onCreateView()内部的DisplayImageFragment方法中,我从捆绑软件中获取了位图,并尝试使用Picasso加载位图,如下所示:

Bitmap bmp = getArguments().getParcelable("image");
final Uri uri = getImageUri(getContext(), bmp);
Picasso.with(getActivity()).load(uri).into(ivImage, new ImageLoadedCallback(progressBar) {
            @Override
            public void onSuccess() {
                if (this.progressBar != null) {
                    this.progressBar.setVisibility(View.GONE);
                }
            }
        });

由于某种原因,它不显示所拍摄的图像-而是显示黑色的ImageView。有谁知道为什么会这样?感谢任何努力。

编辑:如果有人感兴趣,则getImageUri()方法在这里:

public Uri getImageUri(Context context, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), inImage, "confirmSelfie", null);
    return Uri.parse(path);
}

我还尝试了从文件(new File("path"))加载,而不是直接传递Uri。

1 个答案:

答案 0 :(得分:0)

使用类似的方法,如果您无法加载URI,则为URI创建一个文件。

File f = new File("path-to-file/file.png")

File f = new File(uri)

Picasso.with(getActivity()).load(f).into(imageView);