设置 android 位图大小,根据最小高度和宽度保持纵横比
Set android bitmap size keeping aspect ratio based on minimum height and width
我目前正在加载一张可以是横向或纵向的图像。
然后我想调整位图的大小以直接在 canvas 上绘制全屏图像。
我需要保持纵横比但图像不适合屏幕但裁剪掉任何大于屏幕的图像。
我可以使用以下方法调整它的大小并使其适合屏幕:
Matrix m = new Matrix();
m.setRectToRect(new RectF(0, 0, b.getWidth(), b.getHeight()), new RectF(0, 0, MyWallpaperService.this.width, MyWallpaperService.this.height), Matrix.ScaleToFit.CENTER);
b = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true);
但我不想在 top/bottom 或两侧有黑条,但我想不出为此正确调整大小的例程。
当您自己将图像绘制到 canvas 上时,第一步是根据屏幕尺寸和原始图像纵横比计算最终图像所需的尺寸。
然后使用 Bitmap class 中的静态函数 createScaledBitmap
调整位图大小以匹配计算出的尺寸。确保只调用此函数一次并存储位图以供绘图例程使用。
最后绘制位图,屏幕上只显示您要查看的位图区域。
一种内存更友好的方法是在调用 Bitmap.createScaledBitmap
之前使用 Bitmap.createBitmap
添加另一个步骤来裁剪图像。这减少了遇到因用户选择又细又长的源图像而导致的内存问题的可能性。
我目前正在加载一张可以是横向或纵向的图像。
然后我想调整位图的大小以直接在 canvas 上绘制全屏图像。
我需要保持纵横比但图像不适合屏幕但裁剪掉任何大于屏幕的图像。
我可以使用以下方法调整它的大小并使其适合屏幕:
Matrix m = new Matrix();
m.setRectToRect(new RectF(0, 0, b.getWidth(), b.getHeight()), new RectF(0, 0, MyWallpaperService.this.width, MyWallpaperService.this.height), Matrix.ScaleToFit.CENTER);
b = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true);
但我不想在 top/bottom 或两侧有黑条,但我想不出为此正确调整大小的例程。
当您自己将图像绘制到 canvas 上时,第一步是根据屏幕尺寸和原始图像纵横比计算最终图像所需的尺寸。
然后使用 Bitmap class 中的静态函数 createScaledBitmap
调整位图大小以匹配计算出的尺寸。确保只调用此函数一次并存储位图以供绘图例程使用。
最后绘制位图,屏幕上只显示您要查看的位图区域。
一种内存更友好的方法是在调用 Bitmap.createScaledBitmap
之前使用 Bitmap.createBitmap
添加另一个步骤来裁剪图像。这减少了遇到因用户选择又细又长的源图像而导致的内存问题的可能性。