码迷,mamicode.com
首页 > 移动开发 > 详细

Android Bitmap在不加载图片的前提获取宽高

时间:2015-04-14 21:37:58      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:android   bitmap   

 代码参考:

 

 /** 
     * 根据View(主要是ImageView)的宽和高来获取图片的缩略图 
     * @param path 
     * @param viewWidth 
     * @param viewHeight 
     * @return 
     */  
    private Bitmap decodeThumbBitmapForFile(String path, int viewWidth, int viewHeight){  
        BitmapFactory.Options options = new BitmapFactory.Options();  
        //设置为true,表示解析Bitmap对象,该对象不占内存  
        options.inJustDecodeBounds = true;  
        BitmapFactory.decodeFile(path, options);  
        //设置缩放比例  
        options.inSampleSize = computeScale(options, viewWidth, viewHeight);  
          
        //设置为false,解析Bitmap对象加入到内存中  
        options.inJustDecodeBounds = false;  
          
        return BitmapFactory.decodeFile(path, options);  
    }  
      
      
    /** 
     * 根据View(主要是ImageView)的宽和高来计算Bitmap缩放比例。默认不缩放 
     * @param options 
     * @param width 
     * @param height 
     */  
    private int computeScale(BitmapFactory.Options options, int viewWidth, int viewHeight){  
        int inSampleSize = 1;  
        if(viewWidth == 0 || viewHeight == 0){  
            return inSampleSize;  
        }  
        int bitmapWidth = options.outWidth;  
        int bitmapHeight = options.outHeight;  
          
        //假如Bitmap的宽度或高度大于我们设定图片的View的宽高,则计算缩放比例  
        if(bitmapWidth > viewWidth || bitmapHeight > viewWidth){  
            int widthScale = Math.round((float) bitmapWidth / (float) viewWidth);  
            int heightScale = Math.round((float) bitmapHeight / (float) viewWidth);  
              
            //为了保证图片不缩放变形,我们取宽高比例最小的那个  
            inSampleSize = widthScale < heightScale ? widthScale : heightScale;  
        }  
        return inSampleSize;  
    }  
      
另外可参照:

BitmapFactory.Options options = new BitmapFactory.Options();  
         
       /** 
        * 最关键在此,把options.inJustDecodeBounds = true; 
        * 这里再decodeFile(),返回的bitmap为空,但此时调用options.outHeight时,已经包含了图片的高了 
        */  
       options.inJustDecodeBounds = true;  
       Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.jpg", options); // 此时返回的bitmap为null  
       /** 
        *options.outHeight为原始图片的高 
        */  
       Log.e("Test", "Bitmap Height == " + options.outHeight);  

根据这些方法,可以在实际加载Bitmap图片之前根据需要设置图片缩小为原来的(1/2,1/4,1/8,1/16..)

下面是Android源码中关于 inSampleSize的说明:

 

<span style="background-color: rgb(51, 255, 51);">public int inSampleSize</span>

Added in API level 1
If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. The sample size is the number of pixels in either dimension that correspond to a single pixel in the decoded bitmap. For example, inSampleSize == 4 returns an image that is 1/4 the width/height of the original, and 1/16 the number of pixels. Any value <= 1 is treated the same as 1. Note: the decoder uses a final value based on powers of 2,<span style="background-color: rgb(51, 255, 51);"> any other value will be rounded down to the nearest power of 2</span>.

Android Bitmap在不加载图片的前提获取宽高

标签:android   bitmap   

原文地址:http://blog.csdn.net/adayabetter/article/details/45047017

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!