URI和位图图像之间的差异

时间:2017-01-02 17:15:51

标签: android bitmap imageview uri

imageView显示图片的最佳做法是什么?我们有两种类型的图片,一种是bitmap,另一种是URI。如果我使用位图,

Bitmap photo = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(photo);

图像有点模糊。

如果我使用URI,有时会出现内存问题。

 URI imageUri = data.getData();
 imageView.setImageURI(imageURI);

两者有什么区别?

enter image description here

2 个答案:

答案 0 :(得分:2)

ImageView有4个API来指定图像。

  1. setImageDrawable(Drawable drawable)
  2. setImageBitmap(Bitmap bm)
  3. setImageResource(int resId)
  4. setImageURI(URI uri)
  5. 这里setImageDrawable是其他API所依赖的原始函数。其他3个只是帮助方法,使您编写更少的代码。

    setImageURIsetImageBitmap都在UI线程上运行。我会说setImageBitmap比第一个快一点。 setImageURI确实取决于Uri资源的来源(例如,uri可能指向甚至没有存储在手机上的远程文件)。

    setImageURI()在UI线程上用作读取和解码不是更好,这可能会导致延迟打嗝。

    最好使用以下内容: -

    setImageDrawable(android.graphics.drawable.Drawable)setImageBitmap(android.graphics.Bitmap)BitmapFactory代替。

    您也可以从bitmap返回uri并在imageview

    中使用它
     Uri imageUri = intent.getData();
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),imageUri);
    Imageview my_img_view = (Imageview ) findViewById (R.id.my_img_view);
    my_img_view.setImageBitmap(bitmap);
    

    有时在imageview上加载大位图会导致内存不足异常......所以你应该有效地加载位图..

        public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
        int reqWidth, int reqHeight) {
    
        // First decode with inJustDecodeBounds=true to check dimensions
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);
    
        // Calculate inSampleSize
        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
    
        // Decode bitmap with inSampleSize set
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeResource(res, resId, options);
    }
    
    mImageView.setImageBitmap(
        decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));
    

    请查看这些链接..以便更好地理解

    1. Strange out of memory issue while loading an image to a Bitmap object

    2. Android开发人员文档:https://developer.android.com/training/displaying-bitmaps/load-bitmap.html

答案 1 :(得分:1)

#!/bin/bash function callsign() { echo -e "Insert your call sign" while true; do read input case $input in [Aa,Kk,Nn,Ww][0-9][a-zA-Z][a-zA-Z] ) break;; [Aa,Kk,Nn,Ww][a-zA-Z][0-9][a-zA-Z] ) break;; [Aa,Kk,Nn,Ww][a-zA-Z][0-9][a-zA-Z][a-zA-Z] ) break;; [Aa,Kk,Nn,Ww][0-9][a-zA-Z][a-zA-Z][a-zA-Z] ) break;; [Aa,Kk,Nn,Ww][0-9][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z] ) break ;; * ) echo "please insert valid call sign.";; esac done clear } callsign 是一张现成的图片(Bitmap),而set of bytes with color data是一条通向某事的路径。 URI可以是URI,也可以是http://google.com等等。