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,如需转载请自行联系原作者

相关文章
|
7月前
GEE错误——Layer error: Image.connectedPixelCount: Segment size calculation on floating point bands is n
GEE错误——Layer error: Image.connectedPixelCount: Segment size calculation on floating point bands is n
83 0
|
1月前
|
机器学习/深度学习 测试技术 算法
文献解读-DNAscope: High accuracy small variant calling using machine learning
在这项研究中,研究组证明了DNAscope在不同样本和不同覆盖度水平下都能达到比DNAseq更高的准确性。使用GA4GH分层区域进行的分层分析,能够确认DNAscope在大多数分层区域中都具有高准确性,并突显了DNAscope在插入缺失(indels)和包含变异检测较困难的基因组区域的分层中具有更高的准确性。DNAscope结合了GATK's HaplotypeCaller中使用的成熟数学和统计模型,以及用于变异基因型分析的机器学习方法,在保持计算效率的同时实现了卓越的准确性。
34 3
文献解读-DNAscope: High accuracy small variant calling using machine learning
|
7月前
|
算法 光互联 计算机视觉
Locally Adaptive Color Correction for Underwater Image Dehazing and Matching
该文提出了一种新颖的水下图像处理方法,结合颜色转移和局部调整来校正颜色,以应对水下光照和散射造成的图像退化。传统颜色转移方法基于全局参数,不适应水下场景中颜色变化的局部性质。文章中,作者通过融合策略,利用光衰减水平估计来实现局部颜色校正。首先,通过暗通道先验恢复彩色补偿图像,然后估计光衰减图。接着,创建一个合成图像,该图像的统计特性代表高衰减区域,用于颜色转移。最后,通过加权融合初始图像和颜色转移图像,生成最终的颜色校正图像。这种方法旨在提高水下图像的对比度和颜色准确性,特别关注高衰减区域。
89 1
|
机器学习/深度学习 算法 图形学
Deep learning based multi-scale channel compression feature surface defect detection system
简述:首先应用背景分割和模板匹配技术来定义覆盖目标工件的ROI区域。提取的感兴趣区域被均匀地裁剪成若干个图像块,每个块被送到基于CNN的模型,以分类杂乱背景中不同大小的表面缺陷。最后,对空间上相邻且具有相同类别标签的图像块进行合并,以生成各种表面缺陷的识别图。
153 0
|
数据挖掘
Re15:读论文 LEVEN: A Large-Scale Chinese Legal Event Detection Dataset
Re15:读论文 LEVEN: A Large-Scale Chinese Legal Event Detection Dataset
Re15:读论文 LEVEN: A Large-Scale Chinese Legal Event Detection Dataset
|
前端开发
Google Earth Engine——Layer error: Description length exceeds maximum.解决办法
Google Earth Engine——Layer error: Description length exceeds maximum.解决办法
677 0
Google Earth Engine——Layer error: Description length exceeds maximum.解决办法
|
容器 安全 物联网
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.
1314 0
Speed Matters: How To Process Big Data Securely For Real-time Applications
|
计算机视觉 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...
1085 0

热门文章

最新文章