使用BitmapFactory选项的Android位图缩放

使用BitmapFactory选项的Android位图缩放,android,Android,我曾尝试使用位图工厂选项在缩放、不密度和目标密度中缩放位图。例如,如果位图大小为960 X 600,我希望将其放大到1440 X 900。所以我把denisty设置为2,targetdensity设置为3。 返回的问题位图大小与第一个decodeByteArray函数中返回的位图大小相同。位图不按丹尼斯系数缩放。我的代码中有什么问题 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeB

我曾尝试使用位图工厂选项在缩放、不密度和目标密度中缩放位图。例如,如果位图大小为960 X 600,我希望将其放大到1440 X 900。所以我把denisty设置为2,targetdensity设置为3。 返回的问题位图大小与第一个decodeByteArray函数中返回的位图大小相同。位图不按丹尼斯系数缩放。我的代码中有什么问题

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(imageData, 0, size, options);
int bmpWidth = options.outWidth;
int bmpHeight = options.outHeight;

options.inDensity = 2;
options.inTargetDensity = 3;
options.inPurgeable = true;
options.inInputShareable = true;
options.inScaled = true;
options.inJustDecodeBounds = false;

Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, size, options);
int scaledBmpWidth = bitmap.getWidth();
int scaledBmpHeight = bitmap.getHeight();

设置生成位图的向外宽度和向外高度

options.outWidth = bmpWidth * factor;
options.outHeight = bmpHeight * factor;

原因可能是并非所有解码方法都考虑密度选项。您可以尝试使用ByteArrayInputStream包装数组,并使用decodeStream方法


见例

options.out*
变量/属性在
options.inJustDecodeBounds
设置为
true
时设置。这样,您就可以获得图像的宽度、高度和mime类型,而无需实际将其加载到内存中。