From 165a78f99cbe13aaaaecba4853dde49ce08c745f Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sat, 5 Jul 2025 15:13:01 +0200 Subject: [PATCH] ATC_BLE_OEPL: Keep aspect ratio when scaling --- .../atcbleoepl/ATCBLEOEPLDeviceSupport.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/atcbleoepl/ATCBLEOEPLDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/atcbleoepl/ATCBLEOEPLDeviceSupport.java index 274aaecbba..4911a2b8e3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/atcbleoepl/ATCBLEOEPLDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/atcbleoepl/ATCBLEOEPLDeviceSupport.java @@ -22,7 +22,9 @@ import android.bluetooth.BluetoothGattCharacteristic; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Matrix; +import android.graphics.Paint; import android.graphics.Rect; import android.net.Uri; import android.provider.MediaStore; @@ -343,10 +345,36 @@ public class ATCBLEOEPLDeviceSupport extends AbstractBTLESingleDeviceSupport { } Bitmap bitmap = MediaStore.Images.Media.getBitmap(GBApplication.getContext().getContentResolver(), uri); + int src_width = bitmap.getWidth(); + int src_height = bitmap.getHeight(); + float src_aspect = (float) src_width / src_height; + float dst_aspect = (float) epaper_width / epaper_height; + int dst_height; + int dst_width; + if (dst_aspect > src_aspect) { + // scale to height + dst_height = epaper_height; + dst_width = (int) (epaper_height * src_aspect); + } else { + // scale to width + dst_width = epaper_width; + dst_height = (int) (epaper_width * src_aspect); + + } final Bitmap bmpResized = Bitmap.createBitmap(epaper_width, epaper_height, Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(bmpResized); - final Rect rect = new Rect(0, 0, epaper_width, epaper_height); + + // FIXME: make rotation optional canvas.rotate(180, canvas.getWidth() / 2.0f, canvas.getHeight() / 2.0f); + + // Fill background white + Paint paint = new Paint(); + paint.setStyle(Paint.Style.FILL); + paint.setColor(Color.WHITE); + canvas.drawRect(0, 0, epaper_width, epaper_height, paint); + + // Draw centered + final Rect rect = new Rect((epaper_width - dst_width) / 2, (epaper_height - dst_height) / 2, epaper_width - (epaper_width - dst_width) / 2, epaper_height - (epaper_height - dst_height) / 2); canvas.drawBitmap(bitmap, null, rect, null); Matrix matrix = new Matrix(); matrix.postRotate(180);