Java 如何使用BitmapFactory加载图像文件,但不在其中';s原始尺寸(缩小尺寸)

Java 如何使用BitmapFactory加载图像文件,但不在其中';s原始尺寸(缩小尺寸),java,android,Java,Android,所以我用的是这个代码 Bitmap myBitmap = BitmapFactory.decodeFile(fname); 加载图像文件。但有时加载的图像可能会很大,比如512x512,我现在不想加载图像的所有262144像素,而是按比例加载。我该怎么做?像这样使用Bitmap.Compress(): Uri uri = Uri.fromFile(file); Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolve

所以我用的是这个代码

Bitmap myBitmap = BitmapFactory.decodeFile(fname);
加载图像文件。但有时加载的图像可能会很大,比如512x512,我现在不想加载图像的所有262144像素,而是按比例加载。我该怎么做?

像这样使用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);
质量论据:

int:压缩机提示,0-100。0表示小尺寸压缩,100表示最大质量压缩。某些格式,如无损PNG,将忽略质量设置


您可以使用位图myBitmap=BitmapFactory.decodeFile(fname)获得原始图像

Integer scaleValue;
整数比例高度=desiredMaxPixelHeight/myBitmap.getHeight();
整数scaleWidth=desiredMaxPixelWidth/myBitmap.getWidth();
如果(比例高度<1&&scaleWidth<1)比例值=1;
否则,如果(scaleHeight>scaleWidth)scaleValue=scaleHeight;
else scaleValue=缩放宽度;
位图缩放位图=位图.createScaledBitmap(myBitmap,myBitmap.getHeight()/scaleValue,myBitmap.getWidth()/scaleValue,false);
缩放逻辑可以做得更好,但关键是您可以检查原始位图的信息,然后使用
位图创建新的缩放位图。createScaledBitmap(oldBitmap、sizeX、sizeY、false)

不要管重复的位图了。。。可能重复的
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);