如何使用BitmapFactory加载图像文件,但不加载原始尺寸(缩小尺寸)

时间:2019-10-28 14:59:53

标签: java android

所以我正在使用此代码

Bitmap myBitmap = BitmapFactory.decodeFile(fname);

加载图像文件。但是有时加载的图像可能很大,例如512x512,而我现在不想加载图像的所有262144像素,而是按比例缩小。我该怎么办?

2 个答案:

答案 0 :(得分:0)

像这样使用Bitmap.Compress():

Uri uri = Uri.fromFile(file);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, QUALITY, stream);

QUALITY参数:

  

int:提示压缩器,0-100。 0表示小尺寸压缩,100表示​​最大质量压缩。某些格式(例如无损的PNG)会忽略质量设置

答案 1 :(得分:0)

您使用Bitmap myBitmap = BitmapFactory.decodeFile(fname)获得原始图像。

Integer scaleValue;

Integer scaleHeight = desiredMaxPixelHeight/myBitmap.getHeight();
Integer scaleWidth = desiredMaxPixelWidth/myBitmap.getWidth();

if (scaleHeight < 1 && scaleWidth < 1) scaleValue = 1;
else if (scaleHeight > scaleWidth) scaleValue = scaleHeight;
else scaleValue = scaleWidth;

Bitmap scaledBitmap = Bitmap.createScaledBitmap(myBitmap, myBitmap.getHeight()/scaleValue, myBitmap.getWidth()/scaleValue, false);

缩放逻辑可以做得更好,但要点是,您可以检查有关原始位图的信息,然后使用Bitmap.createScaledBitmap(oldBitmap,sizeX,sizeY,false)

创建新的缩放比例。