我需要一种方法将图像缩小到78x78。我已经找到了通过切掉部分图像来实现这一目的的方法,如下所示:
Bitmap image = Bitmap.createBitmap(image, 0, 0, 78, 78);
但我需要保持尽可能多的图像。我曾想过缩小图像然后使其成为正方形:
Bitmap image = Bitmap.createScaledBitmap(imageTest, 78, 78, true);
但当然这会产生一个被压扁的方形图像。
有人可以建议我如何创建一个78x78图像,该图像不会重新缩放并保留尽可能多的原始图像吗?
答案 0 :(得分:1)
根据我的理解,您应缩小并居中裁剪图像。试试这个代码。
public Bitmap scaleCenterCrop(Bitmap source, int newHeight, int newWidth) {
int sourceWidth = source.getWidth();
int sourceHeight = source.getHeight();
// Compute the scaling factors to fit the new height and width, respectively.
// To cover the final image, the final scaling will be the bigger
// of these two.
float xScale = (float) newWidth / sourceWidth;
float yScale = (float) newHeight / sourceHeight;
float scale = Math.max(xScale, yScale);
// Now get the size of the source bitmap when scaled
float scaledWidth = scale * sourceWidth;
float scaledHeight = scale * sourceHeight;
// Let's find out the upper left coordinates if the scaled bitmap
// should be centered in the new size give by the parameters
float left = (newWidth - scaledWidth) / 2;
float top = (newHeight - scaledHeight) / 2;
// The target rectangle for the new, scaled version of the source bitmap will now
// be
RectF targetRect = new RectF(left, top, left + scaledWidth, top + scaledHeight);
// Finally, we create a new bitmap of the specified size and draw our new,
// scaled bitmap onto it.
Bitmap dest = Bitmap.createBitmap(newWidth, newHeight, source.getConfig());
Canvas canvas = new Canvas(dest);
canvas.drawBitmap(source, null, targetRect, null);
return dest;
}
希望有所帮助
答案 1 :(得分:0)
试试这个:
Bitmap image = Bitmap.createScaledBitmap(testImage, (int) 78 * (testImage.getWidth() / testImage.getHeight()), 78, true);
image = Bitmap.createBitmap(image, (int) (image.getWidth() - 78) / 2, 78);
没有测试过这个,因为我正在上床睡觉,但它应该达到你想要的效果,只要你的图像的宽度大于或等于它的高度。
无论如何,我建议您使用BufferedImage而不是Bitmap。
答案 2 :(得分:0)
这里的想法是使用相同的宽度和高度调整大小调整图像大小,保持较小的大小为78.之后,您可以使用基于中心点的裁剪来获取图像的中间位置并使其成为平方图像。
Image srcImage;
int widthSrc = 150;
int heightSrc = 180;
float resizeRate = 78 / min(widthSrc, heightSrc);
Image resizedImage = resizeImage($srcImage, resizeRate);
int widthDest = 78;
int heightDest = 78;
int cropX = ($widthSrc - $widthDest)/2;
int cropY = ($heightSrc - $heightDest)/2;
Image croppedImage = cropImage(resizedImage,$widthDest, $heightDest, $cropX, $cropY);
如果图像已经是方形,则可以跳过裁剪部分。