加载和显示图片是很消耗内存的一件事,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;