# HG changeset patch # User Matti Hamalainen # Date 1530826999 -10800 # Node ID 4161d798cb6401334582498dec860eb44e2e7921 # Parent 892a06169bb59ae5903474dce3d76936eed86e81 Clean up/refactor image (jpeg/png) importing a bit and rename function. diff -r 892a06169bb5 -r 4161d798cb64 exporters.pde --- 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); } } } } } - } diff -r 892a06169bb5 -r 4161d798cb64 multipaint.pde --- 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; }