changeset 92:4161d798cb64

Clean up/refactor image (jpeg/png) importing a bit and rename function.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 06 Jul 2018 00:43:19 +0300
parents 892a06169bb5
children aadcd5f7e9dc
files exporters.pde multipaint.pde
diffstat 2 files changed, 119 insertions(+), 102 deletions(-) [+]
line wrap: on
line diff
--- a/exporters.pde	Fri Jul 06 00:42:06 2018 +0300
+++ b/exporters.pde	Fri Jul 06 00:43:19 2018 +0300
@@ -1,8 +1,8 @@
+//
 // machine definitions
 // source writer and other export/import functions
-// the machine_export() makes use of bitmapexport() and colorexport() below
 // remember hexdump -C !
-
+//
 String g_formatname, g_formatext;
 int g_dataoffs;
 int[] g_grids = new int[16];
@@ -942,9 +942,14 @@
 }
 
 
-void import_image(String name) {
-    PImage image;
-    image = loadImage(name);
+bool mpImportFromImage(PImage image)
+{
+    if (image == null)
+        return false;
+
+    if (image.width <= 16 || image.height <= 16)
+        return false;
+
     int balx, baly, xx, yy, x2, y2, rr, gg, bb, avg, molox, i, j, target;
     int cx, cy;
     int aas, bbs, swap, idefix, avx, avy;
@@ -978,14 +983,9 @@
     if (g_multic == 1 || g_hzoomer == 2) {
         molox = 2;
     }
-    ww = image.width;
-    hh = image.height;
-    if (ww <= 16 || hh <= 16) {
-        return;
-    }
-    balx = int(ww / X);
-    balx = balx * molox;
-    baly = int(hh / Y);
+
+    balx = int(image.width / X) * molox;
+    baly = int(image.height / Y);
     if (balx < 1) {
         balx = 1;
     }
@@ -993,7 +993,8 @@
         baly = 1;
     }
 
-    if (g_palsteps > 0) {
+    if (g_palsteps > 0)
+    {
         for (i = 0; i < g_maxcolors; i++) {
             makecolor(i, 0, 0, 0);
         }
@@ -1008,41 +1009,43 @@
         for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++)
         for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox)
         {
-            x2 = int(ww / X) * xx;
-            y2 = int(hh / Y) * yy;
+            x2 = int(image.width / X) * xx;
+            y2 = int(image.height / Y) * yy;
             rr = 0;
             gg = 0;
             bb = 0;
             avg = 0;
 
-            for (avy = 0; avy < baly; avy++)
-            for (avx = 0; avx < balx; avx++)
-            {
-                c = image.get(x2 + avx, y2 + avy);
-                rr = rr + int(red(c));
-                gg = gg + int(green(c));
-                bb = bb + int(blue(c));
-                avg++;
+            for (avy = 0; avy < baly; avy++) {
+                for (avx = 0; avx < balx; avx++) {
+                    c = image.get(x2 + avx, y2 + avy);
+                    rr = rr + int(red(c));
+                    gg = gg + int(green(c));
+                    bb = bb + int(blue(c));
+                    avg++;
+                }
             }
 
             rh = rr / (avg);
             gh = gg / (avg);
             bh = bb / (avg);
+
             rh = int(rh) / palls;
             gh = int(gh) / palls;
             bh = int(bh) / palls;
             histog[int(rh * (g_palsteps * g_palsteps) + gh * (g_palsteps) + bh)]++;
+
             if (histog[int(rh * (g_palsteps * g_palsteps) + gh * (g_palsteps) + bh)] > maxhis) {
                 maxhis = histog[int(rh * (g_palsteps * g_palsteps) + gh * (g_palsteps) + bh)];
             }
         }
 
-        int step;
-        step = 0;
+        int step = 0;
         for (j = maxhis; j > 0; j--)
         for (i = 0; i <= 4096; i++)
         {
-            if (histog[i] == j) {
+            if (histog[i] == j)
+            {
                 rh = i / int(g_palsteps * g_palsteps);
                 gh = i - int(rh * (g_palsteps * g_palsteps));
                 gh = gh / int(g_palsteps);
@@ -1059,16 +1062,73 @@
         }
     }
 
-    for (cy = 0; cy < MY * erkki; cy++) {
-        for (cx = 0; cx < MX; cx++) {
-            for (i = 0; i < xcolors; i++) {
-                pixut[i] = 0;
-                idx[i] = i;
+    for (cy = 0; cy < MY * erkki; cy++)
+    for (cx = 0; cx < MX; cx++) {
+        for (i = 0; i < xcolors; i++) {
+            pixut[i] = 0;
+            idx[i] = i;
+        }
+        for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) {
+            for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) {
+                x2 = int(image.width / X) * xx;
+                y2 = int(image.height / Y) * yy;
+                rr = 0;
+                gg = 0;
+                bb = 0;
+                avg = 0;
+                for (avy = 0; avy < baly; avy++) {
+                    for (avx = 0; avx < balx; avx++) {
+                        c = image.get(x2 + avx, y2 + avy);
+                        rr = rr + int(red(c));
+                        gg = gg + int(green(c));
+                        bb = bb + int(blue(c));
+                        avg++;
+                    }
+                }
+                rr = rr / (avg);
+                gg = gg / (avg);
+                bb = bb / (avg);
+                g_farge = 0;
+                target = -1;
+                compa = 9999;
+                for (i = 0; i < xcolors; i++) {
+                    fld = dist(rr, gg, bb, g_r[i], g_g[i], g_b[i]);
+                    if (fld < compa) {
+                        compa = fld;
+                        target = i;
+                    }
+                }
+
+                g_farge = target;
+                pixut[target]++; //histogramming
             }
-            for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) {
-                for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) {
-                    x2 = int(ww / X) * xx;
-                    y2 = int(hh / Y) * yy;
+        }
+
+        for (aas = 0; aas < xcolors; aas++)
+        for (bbs = 0; bbs <= aas; bbs++)
+        {
+            if (pixut[aas] > pixut[bbs])
+            {
+                swap = pixut[aas];
+                pixut[aas] = pixut[bbs];
+                pixut[bbs] = swap;
+                swap = idx[aas];
+                idx[aas] = idx[bbs];
+                idx[bbs] = swap;
+            }
+        }
+
+        for (idefix = 0; idefix < limitter; idefix++)
+        {
+            i = idx[idefix];
+            for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++)
+            {
+                for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox)
+                {
+
+                    x2 = int(image.width / X) * xx;
+                    y2 = int(image.height / Y) * yy;
+
                     rr = 0;
                     gg = 0;
                     bb = 0;
@@ -1088,86 +1148,31 @@
                     g_farge = 0;
                     target = -1;
                     compa = 9999;
-                    for (i = 0; i < xcolors; i++) {
-                        fld = dist(rr, gg, bb, g_r[i], g_g[i], g_b[i]);
+                    for (j = 0; j < limitter; j++) {
+                        fld = dist(rr, gg, bb, g_r[idx[j]], g_g[idx[j]], g_b[idx[j]]);
                         if (fld < compa) {
                             compa = fld;
-                            target = i;
+                            target = idx[j];
                         }
                     }
-
-                    g_farge = target;
-                    pixut[target]++; //histogramming
-                }
-            }
+                    if (i == target) {
 
-            for (aas = 0; aas < xcolors; aas++) {
-                for (bbs = 0; bbs <= aas; bbs++) {
-                    if (pixut[aas] > pixut[bbs]) {
-                        swap = pixut[aas];
-                        pixut[aas] = pixut[bbs];
-                        pixut[bbs] = swap;
-                        swap = idx[aas];
-                        idx[aas] = idx[bbs];
-                        idx[bbs] = swap;
+                        g_farge = target;
+                        makepoint(xx, yy);
                     }
                 }
             }
 
-            for (idefix = 0; idefix < limitter; idefix++) {
-                i = idx[idefix];
+            if (idefix == 0) {
                 for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) {
                     for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) {
-
-                        x2 = int(ww / X) * xx;
-                        y2 = int(hh / Y) * yy;
-
-                        rr = 0;
-                        gg = 0;
-                        bb = 0;
-                        avg = 0;
-                        for (avy = 0; avy < baly; avy++) {
-                            for (avx = 0; avx < balx; avx++) {
-                                c = image.get(x2 + avx, y2 + avy);
-                                rr = rr + int(red(c));
-                                gg = gg + int(green(c));
-                                bb = bb + int(blue(c));
-                                avg++;
-                            }
-                        }
-                        rr = rr / (avg);
-                        gg = gg / (avg);
-                        bb = bb / (avg);
-                        g_farge = 0;
-                        target = -1;
-                        compa = 9999;
-                        for (j = 0; j < limitter; j++) {
-                            fld = dist(rr, gg, bb, g_r[idx[j]], g_g[idx[j]], g_b[idx[j]]);
-                            if (fld < compa) {
-                                compa = fld;
-                                target = idx[j];
-                            }
-                        }
-                        if (i == target) {
-
-                            g_farge = target;
-                            makepoint(xx, yy);
-                        }
-                    }
-                }
-                if (idefix == 0) {
-
-                    for (yy = cy * vertti; yy <= cy * vertti + vertti - 1; yy++) {
-                        for (xx = cx * 8; xx <= cx * 8 + 7; xx = xx + molox) {
-                            g_farge = idx[0];
-                            makepoint(xx, yy);
-                        }
+                        g_farge = idx[0];
+                        makepoint(xx, yy);
                     }
                 }
             }
         }
     }
-
 }
 
 
--- a/multipaint.pde	Fri Jul 06 00:42:06 2018 +0300
+++ b/multipaint.pde	Fri Jul 06 00:43:19 2018 +0300
@@ -324,8 +324,15 @@
 }
 
 
-void mpLoadPNGImage(String name)
+bool mpLoadPNGImage(String name)
 {
+    PImage simg = null;
+    if (simg == null)
+    {
+        message("Error 1");
+        return false;
+    }
+
     int lefth = g_farge;
     int righth = g_backg;
     storeparameters();
@@ -334,7 +341,11 @@
     g_data[int('t')] = 0;
     g_data[int('b')] = 1; //old IQ
 
-    import_image(name);
+    if (!mpImportFromImage(simg))
+    {
+        message("Error 2");
+        return false;
+    }
 
     restoreparameters();
     refreshpalette();
@@ -343,6 +354,7 @@
     message("Image|loaded");
     selectcolor(0, lefth);
     selectcolor(1, righth);
+    return true;
 }