我有一个大小为1024x1024.png的位图,我需要在不同的设备屏幕上拉伸它,我尝试使用它:
// given a resource, return a bitmap with a specified maximum height
public static Bitmap maxHeightResourceToBitmap(Context c, int res,
int maxHeight) {
Bitmap bmp = imageResourceToBitmap(c, res, maxHeight);
int width = bmp.getWidth();
int height = bmp.getHeight();
int newHeight = maxHeight;
int newWidth = maxHeight / 2;
// calculate the scale - in this case = 0.4f
float scaleHeight = ((float) newHeight) / height;
float scaleWidth = ((float) newWidth) / width;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap and return it
return Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);
}
// given a resource, return a bitmap with a specified maximum height
public static Bitmap scaleWithRatio(Context c, int res,
int max) {
Bitmap bmp = imageResourceToBitmap(c, res, max);
int width = bmp.getWidth();
int height = bmp.getHeight();
// calculate the scale - in this case = 0.4f
float scaleHeight = ((float) max) / height;
float scaleWidth = ((float) max) / width;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap and return it
return Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true);
答案 0 :(得分:0)
为了在屏幕上拉伸位图,我建议将位图保留为内存中的原始位置(在任何情况下都不要使位图本身更大)。
然后,当您在屏幕上显示时,通常使用ImageView
,您可以将图片视图ScaleType
设置为FIT_XY
(有关详细信息,请参阅docs)。这将在绘制图像时拉伸图像以填充整个ImageView。还要确保您的ImageView通过相应地设置其LayoutParameters来填充整个屏幕(例如填充父级)。
在内存中调整位图大小的唯一真正原因是使它们更小以节省内存。这很重要,因为Android设备的堆有限,如果你的位图内存太大,它们将填满你的整个堆,你将遇到OutOfMemory错误。如果您遇到内存问题,请参阅此tutorial。