我有正方形或矩形的位图 . 我采取最短的一面,做这样的事情:
int value = 0;
if (bitmap.getHeight() <= bitmap.getWidth()) {
value = bitmap.getHeight();
} else {
value = bitmap.getWidth();
}
Bitmap finalBitmap = null;
finalBitmap = Bitmap.createBitmap(bitmap, 0, 0, value, value);
然后我使用它将其缩放为144 x 144位图:
Bitmap lastBitmap = null;
lastBitmap = Bitmap.createScaledBitmap(finalBitmap, 144, 144, true);
问题是它裁剪原始位图的左上角,任何人都有代码来裁剪位图的中心?
9 回答
这可以通过以下方式实现: Bitmap.createBitmap(source, x, y, width, height)
虽然上面的大多数答案提供了一种方法来实现这一点,但已经有一种内置的方法来实现这一点,它是一行代码(
ThumbnailUtils.extractThumbnail()
)如果希望回收位图对象,可以传递使其成为的选项:
来自:ThumbnailUtils Documentation
在使用接受的答案时,我有时会出现内存错误,并且使用ThumbnailUtils为我解决了这些问题 . 此外,这更清洁,更可重复使用 .
你有没有考虑过
layout.xml
这样做?您可以为ScaleType设置ScaleType至android:scaleType="centerCrop"
并在layout.xml
内的ImageView
中设置图像的尺寸 .您可以使用以下代码来解决您的问题 .
上面的方法在裁剪之前做postScalling图像,这样你可以获得裁剪图像的最佳效果而不会出现OOM错误 .
有关详细信息,请参阅this blog
这是一个更完整的代码段,用于裁剪任意尺寸的 [bitmap] 的中心,并将结果缩放到您想要的 [IMAGE_SIZE] . 因此,您将始终获得具有固定大小的图像中心的 [croppedBitmap] 缩放平方 . 缩略图等的理想选择 .
它是其他解决方案更完整的组合 .
到目前为止可能是最简单的解决方案:
进口:
要纠正@willsteel解决方案: