Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: Bild und Farbwerte
AUTOR BEITRAG
DoomTheBrain[OnChalk]

RANG Deckschrubber

#1 - 03.03 17:59

hi zusammen

ich habe hier ein bild dass 400,400 pixel gross ist und als hintergrund farbe habe ich komplett schwarz gewählt (0,0,0). dann habe ich ein (100,100) grosses viereck reingemahlt mit komplett weiss (255,255,255). anschliessend habe ich das im photoshop als jpeg abgespeichert.

nun habe ich eine java methode benutzt um das bild einzlesen und die pixelfarbe auszuwerten.

private BufferedImage readAsBufferedImage(String fileName) throws Exception {
      FileInputStream fileInStream = new FileInputStream(fileName);
      JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fileInStream);
      BufferedImage buffImg = decoder.decodeAsBufferedImage();
      return buffImg;
   }
code


und

for (int i = 0; i < bimg.getWidth(); i++) {
         for (int j = 0; j < bimg.getHeight(); j++) {
            numberOfPixels++;
            int rgb = bimg.getRGB(i, j);
			int red = (rgb >> 16) & 0xff;
			int green = (rgb >> 32) & 0xff;
			int blue = (rgb >> 48) & 0xff;
			
            if ( (red >= check_black(0) && red <= check_black(0) + toleranz) && (green >= check_black(1) && green <= check_black(1) + toleranz) && (blue >= check_black(2) && blue <= check_black(2) + toleranz)) {
               blackPixels++;
            }
            if ( (red <= check_white(0) && red >= check_white(0) - toleranz) && (green <= check_white(1) && green >= check_white(1) - toleranz) && (blue <= check_white(2) && blue >= check_white(2) - toleranz) ) {
            	whitePixels++;
            }
         }
      }
code

ich habe hier die eckigen arrayklammern gegen runde austauschen müsssen, im code ist das aber richtig.

nun habe ich aber das problem, dass ich nicht 10'000 weisse pixel bekomme wie ich erwartet hätte, sondern nur so 9800. ich frage mich aber woran das liegt? hat mir jemand einen tipp?

meine vermutung ist, dass photoshop nicht die genaue grenzen einhält sondern einen winzigen "farbverlauf" macht im weissen viereck und da ein paar graue pixel einstreut. dafür habe ich auch einen toleranzwert gesetzt in meiner farbüberprüfung. dies hilft ein bisschen, aber nicht genug.

weiss jemand wie ich das verhindern kann? Ich weiss das jpeg nicht unbedingt das ideale format ist, weils halt nur mit farbverlust gepseichert werden kann. aber das ist leider eine bedingung in meiner applikation. bei komplett weiss (0,0,0) und komplett schwarz (0,0,0) hatte ich normalerweise auch keine probleme weil das auch im jpeg immer noch 0,0,0 bzw. 255,255,255 ist.

nur irgendwie im randbereich zwischen den vierecken scheints probleme zu geben.

vielen dank für jeden hinweis!
Crush (NSFW)

RANG Deckschrubber

#2 - 06.03 14:03

Ich weiss das jpeg nicht unbedingt das ideale format ist

quote

Das ist das Problem. Harte Kanten mit starken Kontrasten sind immer ein Problem für das Kompressionsverfahren von Jpeg. Ein paar (scheinbar) zufällige Pixel in der Nähe solcher Übergänge werden immer Mischfarben kriegen.

Öffne mal die Jpeg Datei nach dem Speichern und schau dir den Übergang von Schwarz zu Weiß in einer hohen Vergrößerung an, dann wirst du das Problem sehen (besonders gut an den Ecken).

Wie wäre es denn wenn du einfach (r + b + g) > (128 * 3) als weiß und alles andere als schwarz wertest?
DoomTheBrain[OnChalk]

RANG Deckschrubber

#3 - 06.03 17:13

das problem ist eben dass es nicht nur schwarz und weiss hat sondern auch viele anderen farben vorhanden sind.

ist es denn unmöglich scharfe kanten mit jpeg zu verwirklichen? und mit welchem dateiformat könnte man das denn besser
Crush (NSFW)

RANG Deckschrubber

#4 - 06.03 17:51

PNG zum Beispiel. Oder TIFF mit bestimmten Einstellungen.
aaf

RANG Lord of Clanintern

#5 - 11.03 20:23

oder wenn du sowieso nur schwarz & weiss brauchst auch gif.
h¥pertex

RANG Deckschrubber

#6 - 11.03 21:23

das problem ist eben dass es nicht nur schwarz und weiss hat sondern auch viele anderen farben vorhanden sind.

quote
Crush (NSFW)

RANG Deckschrubber

#7 - 11.03 22:23

oder wenn du sowieso nur schwarz & weiss brauchst auch gif.

quote of aaf

PNG hat auch einen Indexed Palette Modus, der von einigen exotischen Sonderfällen abgesehen besser komprimiert als GIF.

Das Einzige wozu man GIFs heutzutage noch braucht sind Animationen. Für jeden anderen Einsatzzweck sind PNGs überlegen.