Przeglądaj źródła

Ahora la firma se convierte en un mapa de bits con fondo blanco

Hugo 5 lat temu
rodzic
commit
753d2db3ee

+ 96 - 0
android/src/main/java/edesarrollos/printer/ImageUtils.java

@@ -0,0 +1,96 @@
+package edesarrollos.printer;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.util.DisplayMetrics;
+
+/**
+ * Created by NotMe on 04/05/2015.
+ */
+public class ImageUtils {
+
+    public  static Bitmap scaleBitmap(Bitmap bitmap, int newWidth, int newHeight) {
+        try {
+            Bitmap scaledBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.RGB_565);
+
+            float ratioX = newWidth / (float) bitmap.getWidth();
+            float ratioY = newHeight / (float) bitmap.getHeight();
+            float middleX = newWidth / 2.0f;
+            float middleY = newHeight / 2.0f;
+
+            Matrix scaleMatrix = new Matrix();
+            scaleMatrix.setScale(ratioX, ratioY, middleX, middleY);
+
+            Canvas canvas = new Canvas(scaledBitmap);
+            canvas.setMatrix(scaleMatrix);
+            canvas.drawBitmap(bitmap, middleX - bitmap.getWidth() / 2, middleY - bitmap.getHeight() / 2, new Paint(Paint.FILTER_BITMAP_FLAG));
+
+            return scaledBitmap;
+        } catch (IllegalArgumentException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return bitmap;
+    }
+
+    public static Bitmap rotateBitmap(Bitmap bitmap, int angle) {
+        try {
+            Matrix rotateMatrix = new Matrix();
+            rotateMatrix.postRotate(angle);
+
+            return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), rotateMatrix, true);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return bitmap;
+    }
+
+    public static Bitmap cropBitmapToBoundingBox(Bitmap picToCrop, int unusedSpaceColor) {
+        int[] pixels = new int[picToCrop.getHeight() * picToCrop.getWidth()];
+        int marginTop = 0, marginBottom = 0, marginLeft = 0, marginRight = 0, i;
+        picToCrop.getPixels(pixels, 0, picToCrop.getWidth(), 0, 0,
+                picToCrop.getWidth(), picToCrop.getHeight());
+
+        for (i = 0; i < pixels.length; i++) {
+            if (pixels[i] != unusedSpaceColor) {
+                marginTop = i / picToCrop.getWidth();
+                break;
+            }
+        }
+
+        outerLoop1: for (i = 0; i < picToCrop.getWidth(); i++) {
+            for (int j = i; j < pixels.length; j += picToCrop.getWidth()) {
+                if (pixels[j] != unusedSpaceColor) {
+                    marginLeft = j % picToCrop.getWidth();
+                    break outerLoop1;
+                }
+            }
+        }
+
+        for (i = pixels.length - 1; i >= 0; i--) {
+            if (pixels[i] != unusedSpaceColor) {
+                marginBottom = (pixels.length - i) / picToCrop.getWidth();
+                break;
+            }
+        }
+
+        outerLoop2: for (i = pixels.length - 1; i >= 0; i--) {
+            for (int j = i; j >= 0; j -= picToCrop.getWidth()) {
+                if (pixels[j] != unusedSpaceColor) {
+                    marginRight = picToCrop.getWidth()
+                            - (j % picToCrop.getWidth());
+                    break outerLoop2;
+                }
+            }
+        }
+
+        return Bitmap.createBitmap(picToCrop, marginLeft, marginTop,
+                picToCrop.getWidth() - marginLeft - marginRight,
+                picToCrop.getHeight() - marginTop - marginBottom);
+    }
+
+}

+ 22 - 1
android/src/main/java/edesarrollos/printer/PrinterPlugin.java

@@ -3,6 +3,8 @@ package edesarrollos.printer;
 import android.app.Activity;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
 import android.os.Handler;
 import android.os.Looper;
 
@@ -15,6 +17,8 @@ import io.flutter.plugin.common.PluginRegistry.Registrar;
 import com.qs.helper.printer.Device;
 import com.qs.helper.printer.bt.*;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.nio.Buffer;
 import java.nio.IntBuffer;
 import java.util.ArrayList;
@@ -64,6 +68,7 @@ public class PrinterPlugin implements MethodCallHandler {
         int intentos = 5;
         String mac = call.argument("mac");
         if (mac == null || mac.trim().length() == 0) {
+          result.
           result.success(false);
           break;
         }
@@ -116,7 +121,23 @@ public class PrinterPlugin implements MethodCallHandler {
           break;
         }
         Bitmap bitmap = BitmapFactory.decodeByteArray(mapa, 0, mapa.length);
-        BlueService.printImage(bitmap);
+
+        // change transparent bitmap background to white
+        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
+        Canvas canvas = new Canvas(newBitmap);
+        canvas.drawColor(Color.WHITE);
+        canvas.drawBitmap(bitmap, 0, 0, null);
+
+        //crop bounding white color
+        newBitmap = ImageUtils.cropBitmapToBoundingBox(newBitmap, Color.WHITE);
+
+        // get inputStream from bitmap
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        newBitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
+        byte[] bitmapdata = bos.toByteArray();
+        ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
+
+        BlueService.printImage(BitmapFactory.decodeStream(bs));
         result.success(true);
         break;
       case "printBitmap2":