Februar 27, 2012
![](../../../../files/2012/02/Bildschirmfoto-2012-02-27-um-13.34.50-300x231.png)
![](../../../../files/2012/02/Bildschirmfoto-2012-02-27-um-13.35.08-300x231.png)
![](../../../../files/2012/02/farbanzeige.jpg)
Code:// Aufgabenstellung: Diashow erstellen mit 5 Bildern welche durch drücken der Leertaste wechseln. Anschliessend kann man mit der Maus über das Bild fahren und // sieht die Pixelwerte des unter dem Cursor liegende Pixels. PImage [] img; PFont font; PImage bearBild; String [] BildName; int[] hist = new int[256]; color[] saveColor = new color[3]; int welchesBild = 0; int histMax; int rectBreite = 40; int mittelwertR; int mittelwertG; int mittelwertB; float timer; float compRed, compGreen, compBlue; float r; float g; float b; boolean farbeja = false; boolean histogrammja = false; void setup() { font = loadFont("Dialog-20.vlw"); textFont(font, 20); smooth(); BildName = new String[5]; BildName[0] = "landschaft.jpg"; BildName[1] = "landschaft1.jpg"; BildName[2] = "landschaft2.jpg"; BildName[3] = "landschaft3.jpg"; BildName[4] = "landschaft4.jpg"; img = new PImage[5]; img[0] = loadImage(BildName[0]); img[1] = loadImage(BildName[1]); img[2] = loadImage(BildName[2]); img[3] = loadImage(BildName[3]); img[4] = loadImage(BildName[4]); size(1024,768); bildDurchsuchen(); } void draw() { loadPixels(); if(farbeja) { image(img[welchesBild],0,0); } else { img[welchesBild] = loadImage(BildName[welchesBild]); image(img[welchesBild],0,0); } stroke(255,255); //setzt die Strichfarbe auf Weiss if(histogrammja) { // Draw half of the histogram (skip every second value) for (int i = 0; i < img[welchesBild].width; i += 2) { // for-Schleife welche jede 2. Spalte durchläuft // Map i (from 0..img.width-1) to a location in the histogram (0..255) int which = int(map(i, 0, img[welchesBild].width, 0, 255)); // Wert wird generiert aus i welcher von 0 bis 255 ist // um die Darstellung auf die ganze Grösse zu machen. // Convert the histogram value to a location between // the bottom and the top of the picture int y = int(map(hist[which], 0, histMax, img[welchesBild].height, 0)); // nimmt den Wert aus dem Array welches dem Wert des Arrays entspricht und mapt diesen. line(i, img[welchesBild].height, i, y); } } //int c = (img[welchesBild].get(mouseX, mouseY)); fill(durchschnittsFarbeAnzeigen(img[welchesBild],mouseX-rectBreite,mouseY-rectBreite,rectBreite,rectBreite)); rect(mouseX-rectBreite,mouseY-rectBreite,rectBreite,rectBreite); // Speicherfelder fill(saveColor[2]); rect(width-60,10,40,40); fill(saveColor[1]); rect(width-120,10,40,40); fill(saveColor[0]); rect(width-180,10,40,40); fill(255); String dataStr1 = "Rotwert:" + mittelwertR; textSize(14); text(dataStr1,mouseX+10,mouseY); String dataStr2 = "Grünwert:" + mittelwertG; text(dataStr2,mouseX+10,mouseY-20); String dataStr3 = "Blauwert:" + mittelwertB; text(dataStr3,mouseX+10,mouseY-40); textSize(24); fill(255); String clockStr = str(hour()) + ":" + str(minute()) + ":" + str(second()) + " Farbmittelwertberechnung"; text(clockStr,20,40); textSize(16); String bildName = "Bildname: "+ BildName[welchesBild]; text(bildName,20,60); } void farbeSpeichern(float _timer,color _c) { if (saveColor[0] == 0 && timer <= 1) { timer = 0; saveColor[0] = _c; } else if (saveColor[1] == 0 && timer <= 1) { timer = 0; saveColor[1] = _c; } else if (saveColor[2] == 0 && timer <= 1) { timer = 0; saveColor[2] = _c; } else if ((saveColor[0] + saveColor[1] + saveColor[2]) != 0 ) { saveColor[0] = 0; saveColor[1] = 0; saveColor[2] = 0; } } void mouseClicked() { timer = 0; farbeSpeichern(timer,durchschnittsFarbeAnzeigen(img[welchesBild],mouseX-rectBreite,mouseY-rectBreite,rectBreite,rectBreite)); timer++; farbeErsetzen(); } void bildDurchsuchen() { //hist = new int[256]; for(int i=0;i< hist.length;i++) hist[i]=0; for (int i = 0; i < img[welchesBild].width; i++) { // diese Schleife geht durch die Spalten for (int j = 0; j < img[welchesBild].height; j++) { // diese Schleife geht die Pixel der Spalte durch int bright = int(brightness(img[welchesBild].get(i, j))); // get(i,j) liest die Farbinformation des Pixels mit den Koordinaten i,j aus / brightness() gibt die Helligkeit des Pixels aus hist[bright]++; // schreibt den Wert ins Array } } // Find the largest value in the histogram histMax = max(hist); // liest den höchsten Wert des Arrays aus } void farbeErsetzen() { //bearBild = createImage(img[welchesBild].width, img[welchesBild].height, RGB); img[welchesBild].loadPixels(); for (int x = 0; x < img[welchesBild].width; x++ ) { for (int y = 0; y < img[welchesBild].height; y++ ) { int loc = x + y*img[welchesBild].width; color farbeWert = color(img[welchesBild].pixels [loc]); for(int t = 0; t < saveColor.length; t++) { if((farbeWert <= saveColor[t]+10000) && (farbeWert >= saveColor[t]-10000)) { img[welchesBild].pixels[loc] = color(255,0,0); } } } } img[welchesBild].updatePixels(); farbeja = true; println(img[welchesBild]); println(saveColor[0]); } color durchschnittsFarbeAnzeigen(PImage _img, int _x, int _y, int breite, int hoehe) { int r = 0; int g = 0; int b = 0; for (int i = _x; i < _x+breite; i++) { for (int j = _y; j < _y+hoehe; j++) { r += int(red(_img.get(i,j))); g += int(green(_img.get(i,j))); b += int(blue(_img.get(i,j))); } } int anzahlPunkte = breite * hoehe; mittelwertR = r/anzahlPunkte; mittelwertG = g/anzahlPunkte; mittelwertB = b/anzahlPunkte; return(color(mittelwertR,mittelwertG,mittelwertB)); } void keyPressed() { switch(key) { case'1': welchesBild = 0; break; case'2': welchesBild = 1; break; case'3': welchesBild = 2; break; case'4': welchesBild = 3; break; case'5': welchesBild = 4; break; case' ': farbeja = false; break; case ENTER: if(histogrammja) { histogrammja = false; } else{ histogrammja = true; } break; default: welchesBild = 0; break; } bildDurchsuchen(); } <pre>