Java 从Uri获取位图

Java 从Uri获取位图,java,android,android-bitmap,Java,Android,Android Bitmap,我已经研究了一系列StackOverFlow问题,我已经尝试了所有这些问题,正如您在注释代码中看到的那样。我试图得到一个位图,它在拍照时是不变的。位图的像素位置对于我的目标至关重要。图像质量很高,可能是一个更大的文件。我的位图总是空的,我已经确定我的Uri不是空的。有什么想法吗 该文件的分辨率太大,无法生成位图。内存不足,无法构造位图,因此返回空值 尝试查看一个非常小的图像文件。如果位图来自您的移动存储,您可以从下面的代码直接从URI获取位图 protected void onCreate(Bu

我已经研究了一系列StackOverFlow问题,我已经尝试了所有这些问题,正如您在注释代码中看到的那样。我试图得到一个位图,它在拍照时是不变的。位图的像素位置对于我的目标至关重要。图像质量很高,可能是一个更大的文件。我的位图总是空的,我已经确定我的Uri不是空的。有什么想法吗

该文件的分辨率太大,无法生成位图。内存不足,无法构造位图,因此返回空值


尝试查看一个非常小的图像文件。

如果位图来自您的移动存储,您可以从下面的代码直接从URI获取位图

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_image);

   imageView = (ImageView) findViewById(R.id.imageView);

    Intent intent = getIntent();
    Uri imageUri = intent.getData();
   // Picasso.with(this).load(imageUri).into(imageView);

    if(imageUri == null){
        Log.d(TAG, "Check");
    }






        //BitmapFactory.Options options = new BitmapFactory.Options();
     //   options.inSampleSize = 8;
     //   bm = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);

    Bitmap bm = null;

    try{
        InputStream image;
    try{
        image = getContentResolver().openInputStream(imageUri);
        bm = BitmapFactory.decodeStream(image);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    }
    catch (Exception e){
        e.printStackTrace();
    }




    //BitmapFactory.Options options = new BitmapFactory.Options();
   // bm = BitmapFactory.decodeFile(file.getAbsolutePath(),options);


    if ((bm == null)) {
        prints("It doesn't work");
    }

    //Log.d(TAG,"Going to convert image.");
      imageView.setImageBitmap(bm);
如果文件太大而无法加载。。您需要压缩图像并显示。为此,还需要使用异步任务

我已经做了一个图像压缩任务,你可以使用它的大图像

public Bitmap getBitmapFromURI(Uri uri){
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = getActivity().getContentResolver().query(uri, filePathColumn, null, null, null);
        if(cursor!=null){
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            File f_image = new File(cursor.getString(columnIndex));
            cursor.close();
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            return BitmapFactory.decodeFile(f_image.getAbsolutePath(), o2);
        }
        return null;
    }

希望这能帮到你。

我想下面的代码会帮到你

ConvertBase64Task task = new ConvertBase64Task(File Object of Image);
        task.setImageCompressiorListner(new ConvertBase64Task.ImageCompressiorListner() {
        @Override
        public void onImageCompressed(Bitmap bitmap) {

        }

        @Override
        public void onError() {

        }
    });
    task.execute();

将通用图像加载器用于
SimpleImage LoadingListener()

输入流图像。请不要写不可读的代码。不要将输入流命名为图像。下面,我可以知道代码出了什么问题吗?
ConvertBase64Task task = new ConvertBase64Task(File Object of Image);
        task.setImageCompressiorListner(new ConvertBase64Task.ImageCompressiorListner() {
        @Override
        public void onImageCompressed(Bitmap bitmap) {

        }

        @Override
        public void onError() {

        }
    });
    task.execute();
  private void setImage(String path, CircleImageView img) {

    options = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .considerExifParams(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .showImageOnLoading(R.drawable.user)
            .showImageForEmptyUri(R.drawable.user)
            .showImageOnFail(R.drawable.user)
            .build();

    ImageLoader.getInstance().displayImage(path, img, options, new SimpleImageLoadingListener() {

        @Override
        public void onLoadingStarted(String imageUri, View view) {
            super.onLoadingStarted(imageUri, view);
        }

        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            super.onLoadingFailed(imageUri, view, failReason);
        }

        @Override
        public void onLoadingCancelled(String imageUri, View view) {
            super.onLoadingCancelled(imageUri, view);
        }

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            super.onLoadingComplete(imageUri, view, loadedImage);
        }
    }, new ImageLoadingProgressListener() {
        @Override
        public void onProgressUpdate(String s, View view, int i, int i1) {

        }
    });
}