BitmapFactory.Options操作图片显示大小

 

加载和显示图片是很消耗内存的一件事,BitmapFactory.Options 类,  允许我们定义图片以何种方式如何读到内存,

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();  
bmpFactoryOptions.inSampleSize = 8;  
Bitmap bmp = BitmapFactory.decodeFile(imageFilePath, bmpFactoryOptions);  
imv.setImageBitmap(bmp);  

    上面的代码使图片变成原来的1/8.



//imv = (ImageView) findViewById(R.id.ReturnedImageView);  
        Display currentDisplay = getWindowManager().getDefaultDisplay();  
        int dw = currentDisplay.getWidth();  
        int dh = currentDisplay.getHeight();  
          try  
       {  
        BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();  
        bmpFactoryOptions.inJustDecodeBounds = true;  
        Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().  
        openInputStream(imageFileUri), null,  bmpFactoryOptions);  
        int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)dh);  
        int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)dw);  
        Log.v("HEIGHRATIO", ""+heightRatio);  
        Log.v("WIDTHRATIO", ""+widthRatio);  
        if (heightRatio > 1 && widthRatio > 1)  
        {  
            bmpFactoryOptions.inSampleSize =  heightRatio > widthRatio ? heightRatio:widthRatio;  
        }  
       bmpFactoryOptions.inJustDecodeBounds = false;  
       bmp = BitmapFactory.decodeStream(getContentResolver().  
       openInputStream(imageFileUri), null,  bmpFactoryOptions);  
       returnedImageView.setImageBitmap(bmp);  
       }  
       catch (FileNotFoundException e)  
       {  
           Log.v("ERROR", e.toString());  
       }  

上面的代码让图片根据窗口大小改变


bmpFactoryOptions.inJustDecodeBounds = true;  
这一行让代码只解码图片的Bounds

你可能感兴趣的:(BitmapFactory.Options操作图片显示大小)