From 34d34f435c2b2cde586abc7ffd70068607217842 Mon Sep 17 00:00:00 2001 From: Marek Ossowski Date: Sun, 17 Aug 2025 00:04:06 +0200 Subject: [PATCH] Refactoring, added postProcessScopeImage --- .../main/java/xdsopl/robot36/BaseMode.java | 7 +++++ app/src/main/java/xdsopl/robot36/HFFax.java | 26 +++++++++++++++++++ .../java/xdsopl/robot36/MainActivity.java | 25 +++--------------- app/src/main/java/xdsopl/robot36/Mode.java | 7 +++++ 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/xdsopl/robot36/BaseMode.java b/app/src/main/java/xdsopl/robot36/BaseMode.java index 64d7607..e18b584 100644 --- a/app/src/main/java/xdsopl/robot36/BaseMode.java +++ b/app/src/main/java/xdsopl/robot36/BaseMode.java @@ -1,8 +1,15 @@ package xdsopl.robot36; +import android.graphics.Bitmap; + public abstract class BaseMode implements Mode { @Override public int getEstimatedHorizontalShift() { return 0; } + + @Override + public Bitmap postProcessScopeImage(Bitmap bmp) { + return Bitmap.createScaledBitmap(bmp, bmp.getWidth() / 3, bmp.getHeight() / 3, true); + } } diff --git a/app/src/main/java/xdsopl/robot36/HFFax.java b/app/src/main/java/xdsopl/robot36/HFFax.java index 7b25c1f..2ee09c7 100644 --- a/app/src/main/java/xdsopl/robot36/HFFax.java +++ b/app/src/main/java/xdsopl/robot36/HFFax.java @@ -1,6 +1,9 @@ package xdsopl.robot36; +import android.graphics.Bitmap; +import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.Rect; /** * HF Fax, IOC 576, 120 lines per minute @@ -67,6 +70,29 @@ public class HFFax extends BaseMode { public void reset() { } + @Override + public Bitmap postProcessScopeImage(Bitmap bmp) { + int shift = getEstimatedHorizontalShift(); + if (shift > 0) { + Bitmap bmpMutable = Bitmap.createBitmap(getWidth(), bmp.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bmpMutable); + canvas.drawBitmap( + bmp, + new Rect(0, 0, shift, bmp.getHeight()), + new Rect(getWidth() - shift, 0, getWidth(), bmp.getHeight()), + null); + canvas.drawBitmap( + bmp, + new Rect(shift, 0, getWidth(), bmp.getHeight()), + new Rect(0, 1, getWidth() - shift, bmp.getHeight() + 1), + null); + + return bmpMutable; + } + + return bmp; + } + @Override public boolean decodeScanLine(PixelBuffer pixelBuffer, float[] scratchBuffer, float[] scanLineBuffer, int scopeBufferWidth, int syncPulseIndex, int scanLineSamples, float frequencyOffset) { if (syncPulseIndex < 0 || syncPulseIndex + scanLineSamples > scanLineBuffer.length) diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java index 0d05ac3..bd54b1a 100644 --- a/app/src/main/java/xdsopl/robot36/MainActivity.java +++ b/app/src/main/java/xdsopl/robot36/MainActivity.java @@ -15,9 +15,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.Rect; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; @@ -846,27 +844,10 @@ public class MainActivity extends AppCompatActivity { int stride = scopeBuffer.width; int offset = stride * scopeBuffer.line; Bitmap bmp = Bitmap.createBitmap(scopeBuffer.pixels, offset, stride, width, height, Bitmap.Config.ARGB_8888); - if (decoder != null && decoder.currentMode.getName().equals("HF Fax")) { - Mode mode = decoder.currentMode; - int shift = mode.getEstimatedHorizontalShift(); - if (shift > 0) { - Bitmap bmpMutable = Bitmap.createBitmap(mode.getWidth(), bmp.getHeight(), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bmpMutable); - canvas.drawBitmap( - bmp, - new Rect(0, 0, shift, bmp.getHeight()), - new Rect(mode.getWidth() - shift, 0, mode.getWidth(), bmp.getHeight()), - null); - canvas.drawBitmap( - bmp, - new Rect(shift, 0, mode.getWidth(), bmp.getHeight()), - new Rect(0, 1, mode.getWidth() - shift, bmp.getHeight() + 1), - null); - bmp = bmpMutable; - } - } else { - bmp = Bitmap.createScaledBitmap(bmp, width / 3, height / 3, true); + if (decoder != null) + { + bmp = decoder.currentMode.postProcessScopeImage(bmp); } storeBitmap(bmp); diff --git a/app/src/main/java/xdsopl/robot36/Mode.java b/app/src/main/java/xdsopl/robot36/Mode.java index 4a07cee..39dc64e 100644 --- a/app/src/main/java/xdsopl/robot36/Mode.java +++ b/app/src/main/java/xdsopl/robot36/Mode.java @@ -6,6 +6,8 @@ Copyright 2024 Ahmet Inan package xdsopl.robot36; +import android.graphics.Bitmap; + public interface Mode { /** * @return mode name @@ -47,6 +49,11 @@ public interface Mode { */ int getEstimatedHorizontalShift(); + /** + * Adjust scope image before saving + */ + Bitmap postProcessScopeImage(Bitmap bmp); + /** * Reset internal state. */