diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index a20570d2360c5d54952a9a647451ed55ebd6b85e..5d9d2955326b3ef016573f4d9a2d3f717ea99f22 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -1270,20 +1270,28 @@ public class FileBackend { } } - public static Bitmap cropCenterSquare(Bitmap input, int size) { - int w = input.getWidth(); - int h = input.getHeight(); - - float scale = Math.max((float) size / h, (float) size / w); - - float outWidth = scale * w; - float outHeight = scale * h; + public static Bitmap cropCenterSquare(final Bitmap input, final int sizeIn) { + final int w = input.getWidth(); + final int h = input.getHeight(); + final int size; + final float outWidth; + final float outHeight; + if (w < sizeIn || h < sizeIn) { + size = Math.min(w, h); + outWidth = w; + outHeight = h; + } else { + size = sizeIn; + final float scale = Math.max((float) sizeIn / h, (float) sizeIn / w); + outWidth = scale * w; + outHeight = scale * h; + } float left = (size - outWidth) / 2; float top = (size - outHeight) / 2; - RectF target = new RectF(left, top, left + outWidth, top + outHeight); + final var target = new RectF(left, top, left + outWidth, top + outHeight); - Bitmap output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(output); + final var output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + final var canvas = new Canvas(output); canvas.drawBitmap(input, null, target, createAntiAliasingPaint()); if (!input.isRecycled()) { input.recycle();