2015-05-09 118 views
0

我目前正在加载可以是横向或纵向的图像。设置基于最小高度和宽度的android位图大小保持宽高比

我然后想要调整位图的大小直接绘制到全屏图像的画布上。

我需要保持高宽比,但图像不适合屏幕,但剪掉任何比屏幕大的图像。

我可以调整它,它具有以下适合屏幕:

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); 

,但我不希望有在顶部/底部或两侧的黑边,但我想不出例程的正确调整为此。

+0

只需设置ImageView ScaleType即可。任何不使用ScaleType的原因。 – Sharj

+0

这是一个动态壁纸,我直接绘制到画布上,需要调整图像大小以便更快处理,因为原始图像可以由用户选择,它们可以非常大或小于屏幕尺寸。 – Andrew

+0

你不需要'Bitmap.createBitmap',当调用'Canvas.drawBitmap'时只需要使用原始的'Bitmap'和计算的'Matrix' – pskink

回答

1

当您将图像绘制到画布上时,第一步是根据屏幕大小和原始图像宽高比计算最终图像所需的尺寸。

然后使用Bitmap类中的静态函数createScaledBitmap调整您的位图大小以匹配计算的尺寸。确保只调用一次该函数并存储位图以便在绘图例程中使用。

最后绘制位图,所以只有你想看到的位图区域在屏幕上。

更多的内存友好方法是在调用Bitmap.createScaledBitmap之前添加另一个步骤来使用Bitmap.createBitmap裁剪图像。这减少了用户选择细长的源图像时遇到内存问题的机会。

相关问题