zoukankan      html  css  js  c++  java
  • 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 GridView, ListView 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:     
    // Get the source image's dimensions
       BitmapFactory.Options options = new BitmapFactory.Options();
       options.inJustDecodeBounds = true; // this does not download the actual image, just downloads headers.
       BitmapFactory.decodeFile(IMAGE_FILE_URL, options);
    
       int srcWidth = options.outWidth;  // actual width of the image.
       int srcHeight = options.outHeight;  // actual height of the image.
    
       // Only scale if the source is big enough. This code is just trying to fit a image into a certain width.
       if(desiredWidth > srcWidth)
         desiredWidth = srcWidth;
    
       // Calculate the correct inSampleSize/scale value. This helps reduce memory use. It should be a power of 2.
       int inSampleSize = 1;
       while(srcWidth / 2 > desiredWidth){
         srcWidth /= 2;
         srcHeight /= 2;
         inSampleSize *= 2;
       }
    
       float desiredScale = (float) desiredWidth / srcWidth;
    
       // Decode with inSampleSize
       options.inJustDecodeBounds = false;  // now download the actual image.
       options.inDither = false;
       options.inSampleSize = inSampleSize;
       options.inScaled = false;
       options.inPreferredConfig = Bitmap.Config.ARGB_8888;  // ensures the image stays as a 32-bit ARGB_8888 image. 
                                                             // This preserves image quality.
       Bitmap sampledSrcBitmap = BitmapFactory.decodeFile(IMAGE_FILE_URL, options);
    
       // Resize
       Matrix matrix = new Matrix();
       matrix.postScale(desiredScale, desiredScale);
       Bitmap scaledBitmap = Bitmap.createBitmap(sampledSrcBitmap, 0, 0,
           sampledSrcBitmap.getWidth(), sampledSrcBitmap.getHeight(), matrix, true);
       sampledSrcBitmap = null;
    
       // Save
       FileOutputStream out = new FileOutputStream(LOCAL_PATH_TO_STORE_IMAGE);
       scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
       scaledBitmap = null;
    


     

     
  • 相关阅读:
    RPC
    动词 or 名词 :这是一个问题 【转载】
    js 如何清除setinterval
    封装动画特效
    飞入特效
    建字段_添加数据_生成json.php
    mybatis由浅入深day02_9.3.5使用生成的代码_9.4逆向工程注意事项
    mybatis由浅入深day02_9逆向工程
    mybatis由浅入深day02_8spring和mybatis整合
    mybatis由浅入深day02_7.4mybatis整合ehcache_7.5二级缓存应用场景_7.6二级缓存局限性
  • 原文地址:https://www.cnblogs.com/xyzlmn/p/3168123.html
Copyright © 2011-2022 走看看