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
46 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》电子版地址
|
XML JavaScript 前端开发
Performance problem during saving - activating big form
Performance problem during saving - activating big form
81 0
|
Shell
Solving environment: failed with initial frozen solve. Retrying with flexible solve的解决方法
Solving environment: failed with initial frozen solve. Retrying with flexible solve的解决方法
10972 0
Solving environment: failed with initial frozen solve. Retrying with flexible solve的解决方法
|
容器 安全 物联网
Speed Matters: How To Process Big Data Securely For Real-time Applications
Big Data processing has stepped up to provide organizations with new tools and technologies to improve business efficiency and competitive advantage.
1261 0
Speed Matters: How To Process Big Data Securely For Real-time Applications
|
tengine 应用服务中间件 Linux
ModSecurity - Efficient and Free WAF Component for Mid- and Small-Scale Webmasters
ModSecurity is a free open source host WAF software (@http://www.modsecurity.org/).
2484 0