2011-03-17 57 views
2

从我原来的question后续。ImageView Android内存

有没有办法在android应用程序中使用ImageViews而不使用大量RAM?

在原来的question我发现我的应用程序使用了大量的RAM,并且发现它是我用过的所有RAM的ImageViews。

以获取图像我用

public void addPictureOnClick(View view){ 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent, "Select Picture"),1); 
    } 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
      // currImageURI is the global variable I'm using to hold the content:// URI of the image 
      Uri currImageURI = data.getData();     
      image.setImageURI(currImageURI); 
     } 

我想知道是否有另一种方式来显示图片,而不是URI?

+0

有多大你加载图像,有多少,以及什么是内存使用,当你使用它们相比,当你不? – DMags 2011-03-17 14:59:08

+0

@DMags:我不知道大小。这是用手机拍摄的照片。 RAM的使用量是4Mb,没有一张图片,24Mb的图片是 – Bastaix 2011-03-17 15:05:47

回答

3

可以缩放你的照片:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 2; 
imageViewFIeld.setImageBitmap(BitmapFactory.decodeByteArray(image, 0, image.length, options)); 

缩放过程可能会更长,如果你有大的图像,但是内存的负荷将展出更低。

编辑:你增加inSampleSize值越多,需要的次数越多,内存使用量越少。

inSampleSize文档:如果设置 到的值> 1,要求解码器 子采样原始图像, 返回一个较小的图像以节省 存储器。样本大小是 对应于解码位图中的单个像素的任意维度中的像素的数量 。例如, inSampleSize == 4返回的图像是 ,它是原始图像的宽度/高度的1/4,以及1/16像素的数量的1/16。任何值< = 1处理 一样。注意:解码器将尝试 满足这一要求,但 生成位图可能有恰恰是已经被要求 不同 尺寸。另外,2的幂次为 通常更快/容易让解码器以 的荣誉。

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

+0

另外一个关于SampleSize的问题是它应该是2的倍数,而12的样本会给你一些图像。我不认为你会看到这个样本大小为2的任何东西。 – 2011-03-17 15:53:05

+0

推荐使用2的权力,但不是强制性的,如文档中所述。“另外,2的权力往往更快/更容易解码器履行。 “如果使用2作为样本大小,则将有一半大小的图像:原始1024x768,比例2:512x384 – Hrk 2011-03-17 16:35:26

+1

使用decodeInbouds获取图像大小,然后动态调整inSampleSize,可以让您以获得图像的最佳分辨率。 – smith324 2011-03-18 01:57:49