ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
1129
1129
EMPFEHLEN
-
So, dann stelle ich mal meine Lösung rein.
Sie ist noch nicht feritg, denn ich habe noch Probleme mit dem skalieren, da bin ich noch nicht ganz hintergestiegen.
Trotzdem hier der Quellcode.
Ich habe alles in einzelne Funktionen gepackt,
damit das Beispiel besser funktioniert und sich Javascript nicht unbedingt aufhängt.
Ihr könnt auch eigene Bilder hochladen, und zwar hier,
ich werde die Bilder nach einigen Tagen dann alle löschen
Es funktioniert im Moment mit mit allen Bildformaten.
Interessant ist folgende Tatsache:
Sobald ich das Bild in Graustufen umwandle und dither und erst dann zerwürfle,
ist es dunkler, als wenn ich das Ausgangsbild dirket würfle.
Gut Zu sehen an der Mona Lisa.
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
if ( window.addEventListener ) { addEventListener( "load", init, false ); } else { attachEvent( "onload", init ); } function change_bild(bild) { if (bild == "n") { canvas.width = 0; canvas.height = 0; return; } image = new Image(); image.src = 'bilder/'+bild; image.onload = function(){load_image()}; } function load_image() { canvas.width = image.width; canvas.height = image.height; if (context = canvas.getContext('2d')) context.drawImage(image, 0, 0); } function init() { //Würfel initialisieren wurfel = new Array(); wurfel[1] = new Image(); wurfel[1].src = "1.jpg"; wurfel[2] = new Image(); wurfel[2].src = "2.jpg"; wurfel[3] = new Image(); wurfel[3].src = "3.jpg"; wurfel[4] = new Image(); wurfel[4].src = "4.jpg"; wurfel[5] = new Image(); wurfel[5].src = "5.jpg"; wurfel[6] = new Image(); wurfel[6].src = "6.jpg"; canvas = document.getElementById('canvas1'); wurfelbreite = new Number(document.getElementById('wpx').value); } function scaleb() { //Auf 1024px max skalieren if (Math.max(canvas.width,canvas.height) <= 1024) return; context.save() var width = 1024/Math.max(canvas.width,canvas.height); var height = 1024/Math.max(canvas.width,canvas.height); canvas.width = image.width*width; canvas.height = image.height*height; context.scale(width, height); context.drawImage(image, 0, 0); context.restore(); } function grey() { //Das Bild nach Graustufen umwandeln var intCol; // Inhalt Kontextes bzw. des Bildes in ImageData objImgData = context.getImageData(0, 0, Math.min(canvas.width, image.width), Math.min(canvas.height, image.height)); for(var i=0; i<objImgData.data.length; i++) { // Falls die alpha-Komponente erreicht wurde if(i%4 == 3) { // Farbmittelwert eines Pixels ermitteln intCol = parseInt(intCol/3); // Farbkomponenten eines Pixel Mittelwert setzen objImgData.data[i-3] = objImgData.data[i-2] = objImgData.data[i-1] = intCol; // Farbwert-Variable zurücksetzen intCol = 0; } else { // Farbwerte addieren intCol += objImgData.data[i]; } } // ImageData als s/w-Variante wieder in Kontext setzen context.putImageData(objImgData, 0, 0); } function dither(){ // Inhalt Kontextes bzw. des Bildes in ImageData objImgData = context.getImageData(0, 0, Math.min(canvas.width, image.width), Math.min(canvas.height, image.height)); //DITHERING for (y = 1; y < canvas.height; y++) { for (x = 1; x < canvas.width; x++) { //Berechnung oldpixel = objImgData.data[p(y,x)]; newpixel = find_closest_palette_color (oldpixel); objImgData.data[p(y,x)] = objImgData.data[p(y,x)+1] = objImgData.data[p(y,x)+2] = newpixel; quant_error = Math.round(oldpixel - newpixel); //Floyd-Steinberg //rechts objImgData.data[p(y,x+1)] = objImgData.data[p(y,x+1)+1] = objImgData.data[p(y,x+1)+2] += Math.round(7 * quant_error / 16); //unten links objImgData.data[p(y+1,x-1)] = objImgData.data[p(y+1,x-1)+1] = objImgData.data[p(y+1,x-1)+2] += Math.round(3 * quant_error / 16); //unten objImgData.data[p(y+1,x)] = objImgData.data[p(y+1,x)+1] = objImgData.data[p(y+1,x)+2] += Math.round(5 * quant_error / 16); //unten rechts objImgData.data[p(y+1,x+1)] = objImgData.data[p(y+1,x+1)+1] = objImgData.data[p(y+1,x+1)+2] += Math.round(1 * quant_error / 16); } } context.putImageData(objImgData, 0, 0); } function wurfeln() { //Dithering abgeschlossen, Nun wrfel einbauen wurfelbreite = new Number(document.getElementById('wpx').value); for (i=1;i<wurfel.length;i++) wurfel[i].width = wurfel[i].heigth = wurfelbreite; // Inhalt Kontextes bzw. des Bildes in ImageData objImgData = context.getImageData(0, 0, Math.min(canvas.width, image.width), Math.min(canvas.height, image.height)); for (y = 0; y < canvas.height-1; y+=wurfelbreite) { for (x = 0; x < canvas.width-1; x+=wurfelbreite) { farbe = 0; for (xx = x; xx < x+wurfelbreite; xx++) for (yy = y; yy < y+wurfelbreite; yy++) farbe += objImgData.data[p(yy, xx)]; farbe = find_closest_wurfel(Math.round(farbe/(wurfelbreite*wurfelbreite))); zeichne_wurfel(x,y,farbe); } } } function p(y,x) { //y*(image.width-1)*4 z = y*(image.width*4); s = 4*x; return s+z; } function find_closest_palette_color(farbe) { if (farbe > 210) return 255; else if (farbe > 168) return 210; else if (farbe > 126) return 168; else if (farbe > 84) return 126; else if (farbe > 42) return 84; else return 0; } function find_closest_wurfel(farbe) { if (farbe > 210) return 1; else if (farbe > 168) return 2; else if (farbe > 126) return 3; else if (farbe > 84) return 4; else if (farbe > 42) return 5; else return 6; } function zeichne_wurfel(x,y,zahl) { if (zahl == 6) { context.drawImage(wurfel[6],x,y); } if (zahl == 5) { context.drawImage(wurfel[5],x,y); } if (zahl == 4) { context.drawImage(wurfel[4],x,y); } if (zahl == 3) { context.drawImage(wurfel[3],x,y); } if (zahl == 2) { context.drawImage(wurfel[2],x,y); } if (zahl == 1) context.drawImage(wurfel[1],x,y); }
Geändert von Chumper (26.03.10 um 05:06 Uhr)
mfg Nils
Problem gelöst?
Dann bitte das Thema als erledigt anhaken
und die Antwort bewerten, die weitergeholfen hat.
Danke!
Ähnliche Themen
-
[QUIZ#11] Chumper (Javascript)
Von Chumper im Forum ArchivAntworten: 3Letzter Beitrag: 25.10.09, 01:24 -
[QUIZ#9] SteffenBoerner (JavaScript)
Von SteffenBoerner im Forum ArchivAntworten: 0Letzter Beitrag: 02.08.09, 14:15 -
JavaScript: Prüfung ob canvas oder explorercanvas unterstützt wird
Von Shakie im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 20.06.09, 00:42 -
Problem mit JavaScript-Quiz!
Von Kevinhatproblem im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 13.01.09, 17:28 -
eine art quiz mit javascript
Von DonMarkeZ im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 30.03.06, 19:51





Login




