Aus jedem Pixel eines Image die RGB Werte auslesen ?

Stumppi

Grünschnabel
Hallo,

ich kann mittels 2 verschachtelter for-Schleifen auf jedes Pixel eines Image zugreifen.
Das Image liegt als BufferedImage vor.

Wie kann ich nun die RGB -Wert eines jeden Pixel auslesen ?

Habe schon einiges mit ColorModel probiert, komme aber nicht so richtig weiter...

Vielen Dank.

Grüße,
Matthias
 
Hallo!

Code:
/**
 * 
 */
package de.turoials;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
 * @author Darimont
 */
public class ImagePixelReader {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		BufferedImage img = ImageIO.read(new File("c:/winter.jpg"));
		
		//Pixelfarbe an stelle x=100, y=50
		int rgb = img.getRGB(100, 50);
		Color c = new Color(rgb);
		System.out.println("Red: " + c.getRed());
		System.out.println("Green: " + c.getGreen());
		System.out.println("Blue: " + c.getBlue());
	}
}

Gruß Tom
 
Kann mir jemand das Program, mit den beiden for-Schleifen, netterweise auch mal in C++ überstzen?
Und ganz nett wären auch eine Einlese und Speicherfunktion von Bmps!

Danke im Voraus!
 
Zuletzt bearbeitet:
Wie sehen denn die beiden for schleifen dazu aus um die Bilder zu durchlaufen?


Danke!
 
Zuletzt bearbeitet:
Hallo!

Wie waers denn damit?
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
 * @author daritho
 * 
 */
public class CountRedGreenPixel {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        BufferedImage image = ImageIO.read(new File("c:/rgb.bmp"));
        int redCnt = 0;
        int greenCnt = 0;
        int blueCnt = 0;
        for (int x = 0, maxX = image.getWidth(); x < maxX; x++) {
            for (int y = 0, maxY = image.getHeight(); y < maxY; y++) {
                int rgb = image.getRGB(y, x);

                Color c = new Color(rgb);
                if (c.getRed() > 0) {
                    redCnt++;
                }

                if (c.getGreen() > 0) {
                    greenCnt++;
                }

                if (c.getBlue() > 0) {
                    blueCnt++;
                }
            }
        }

        System.out.printf(
                "RedCnt: %s, GreenCnt: %s, BlueCnt: %s\n",
                redCnt,
                greenCnt,
                blueCnt);
    }
}

Gruss Tom
 
Hallo,

wenn ich deine schleifen benutze bekomme ich z.B. für ein Bild das 174x132 Pixel groß ist
22909 grüne Pixel und 22678 rote Pixel.
Was muss den alles gelten dass es ein rotes aber kein grünes Pixel ist?
Das c.getRed() > 0 und das c.getGreen() > 0 reichen leider nicht, da auch bei roten Pixeln der GrüneFarbwert > 0 sein kann!

Ich hab jetzt mal

Code:
if (color.getRed() > 0 && color.getRed() > color.getGreen()) {
                                redCnt++;
                            }
eingefügt. Reicht das schon aus um zu sagen dass es ein grünliches Pixel ist?

Danke im voraus!
 
Zuletzt bearbeitet:
Hallo!

Die Farben aus dem RGB Raum setzen sich eben aus bestimmten Anteilen aus Rot Grün und Blau zusammen. In unserem Fall haben können die einzelnen Werte zwischen 0 und 255 liegen. "Pures" rot wäre dann beispielsweise nach RGB:
R-Anteil: G-Anteil: B-Anteil:
255 0 0

Pures Blau:
R-Anteil: G-Anteil: B-Anteil:
0 0 255

Pures Grün:
R-Anteil: G-Anteil: B-Anteil:
0 255 0

Gruß Tom
 
Hallo Matthias,

folgendes möchte ich noch ergänzend sagen.

Ein bild besteht nicht aus roten, grünen und blauen Pixel, sondern aus Pixel mit rotem, grünen und blauen Anteil (nach RGB).

Deswegen ist die Frage nach, wieviel rote, grüne und blaue Pixel ein Bild hat nicht unbedingt sehr sinnergebend. Dahingegen wären die prozentualen Anteile an rot,grün und blau eines Bildes statt Pixel aussagekräftiger.

Vg Erdal
 
Zuletzt bearbeitet:
Da ist jetzt nur die Frage wielange ein Pixel zu grün zählt, also wie hoch der Anteil rot,grün,blau sein darf damit das Pixel zu grün zählt.
Und genauso ist die Frage wielane ein Pixel zu rot zählt!
Ich denke durch meine 2 Bedingungen fang ich schon die richtigen ab, aber reichen diese 2 Bedingungen aus

--> "rötliches Pixel" = Pixel mit Rotwert > 0 und Rotwert > Grünwert!
 
Zurück