Handling large/high resolution images

简介:

Google TV devices have higher display resolution. If you provide low resolution or small images in your layouts, they will appear pixelated, fuzzy, or grainy. This is not a good experience for the user. Instead, use high resolution images. Remember, though, that downloading and storing high-resolution images may cause "out of memory" errors. To avoid these errors, follow these tips: 

  •    Load images only when they're displayed on the screen. For example, are displaying multiple images in a GridViewListView or    Gallery,  only load an image when its getView() is called. 
  • Call recycle() on Bitmaps that are no longer needed.
  • Use WeakReferences for    storing references to Bitmap objects in a in memory collection.
  • If you fetch the images from the network, use     AsyncTask to fetch them all at once or as needed.  Never do network transactions on the main ("UI") thread. Instead, if possible, fetch all the images at once on a background thread, and store them on the sdcard.
  • Scale down very large images to a more appropriate size as you download them; otherwise, downloading the image may cause an "out of memory" error.   Here is sample code that does this scaling while downloading:  

 
  1. // Get the source image's dimensions  
  2.    BitmapFactory.Options options = new BitmapFactory.Options();  
  3.    options.inJustDecodeBounds = true// this does not download the actual image, just downloads headers.  
  4.    BitmapFactory.decodeFile(IMAGE_FILE_URL, options);  
  5.  
  6.    int srcWidth = options.outWidth;  // actual width of the image.  
  7.    int srcHeight = options.outHeight;  // actual height of the image.  
  8.  
  9.    // Only scale if the source is big enough. This code is just trying to fit a image into a certain width.  
  10.    if(desiredWidth > srcWidth)  
  11.      desiredWidth = srcWidth;  
  12.  
  13.    // Calculate the correct inSampleSize/scale value. This helps reduce memory use. It should be a power of 2.  
  14.    int inSampleSize = 1;  
  15.    while(srcWidth / 2 > desiredWidth){  
  16.      srcWidth /= 2;  
  17.      srcHeight /= 2;  
  18.      inSampleSize *= 2;  
  19.    }  
  20.  
  21.    float desiredScale = (float) desiredWidth / srcWidth;  
  22.  
  23.    // Decode with inSampleSize  
  24.    options.inJustDecodeBounds = false;  // now download the actual image.  
  25.    options.inDither = false;  
  26.    options.inSampleSize = inSampleSize;  
  27.    options.inScaled = false;  
  28.    options.inPreferredConfig = Bitmap.Config.ARGB_8888;  // ensures the image stays as a 32-bit ARGB_8888 image.   
  29.                                                          // This preserves image quality.  
  30.    Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(IMAGE_FILE_URL, options);  
  31.  
  32.    // Resize  
  33.    Matrix matrix = new Matrix();  
  34.    matrix.postScale(desiredScale, desiredScale);  
  35.    Bitmap scaledBitmap = Bitmap.createBitmap(sampledSrcBitmap, 00,  
  36.        sampledSrcBitmap.getWidth(), sampledSrcBitmap.getHeight(), matrix, true);  
  37.    sampledSrcBitmap = null;  
  38.  
  39.    // Save  
  40.    FileOutputStream out = new FileOutputStream(LOCAL_PATH_TO_STORE_IMAGE);  
  41.    scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);  
  42.    scaledBitmap = null;  

 





     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/816814,如需转载请自行联系原作者

相关文章
|
6月前
|
计算机视觉
The specified pixels is not supported
The specified pixels is not supported
44 1
|
8月前
|
人工智能
Big Water Problem
Big Water Problem
34 0
|
11月前
|
机器学习/深度学习 算法 图形学
Deep learning based multi-scale channel compression feature surface defect detection system
简述:首先应用背景分割和模板匹配技术来定义覆盖目标工件的ROI区域。提取的感兴趣区域被均匀地裁剪成若干个图像块,每个块被送到基于CNN的模型,以分类杂乱背景中不同大小的表面缺陷。最后,对空间上相邻且具有相同类别标签的图像块进行合并,以生成各种表面缺陷的识别图。
106 0
《Audio Tagging with Compact Feedforward Sequential Memory Network and Audio-to-Audio Ratio Based Data Augmentation》电子版地址
Audio Tagging with Compact Feedforward Sequential Memory Network and Audio-to-Audio Ratio Based Data Augmentation
54 0
《Audio Tagging with Compact Feedforward Sequential Memory Network and Audio-to-Audio Ratio Based Data Augmentation》电子版地址
PAT (Advanced Level) Practice - 1096 Consecutive Factors(20 分)
PAT (Advanced Level) Practice - 1096 Consecutive Factors(20 分)
116 0
|
Web App开发
How to trouble shoot if there is no entityset available when creating a tile
How to trouble shoot if there is no entityset available when creating a tile
How to trouble shoot if there is no entityset available when creating a tile
Performance problem during saving - activating big form
Performance problem during saving - activating big form
80 0
|
计算机视觉 Python
Improving the quality of the output
There are a variety of reasons you might not get good quality output from Tesseract. It's important to note that unless you're using a very unusual fo...
1046 0