Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe folgendes problem:
ich habe ein JPG und möchte nun die farbinformationen aus diesem auslesen, um sie nach häufigkeiten auszuwerten. ich habe auch schon etwas programmiert, weiß aber nicht wo mein fehler liegt. zur probe hab ich ein einfarbiges bild erstellt, das die werte r=3, g=3, b=3 hat. jedoch zeigt mir eclipse bei der ausgabe folgendes an für jedes pixel: R=14 G=7 B=242
hier mal mein code:
Code:
public static void main(String[] args)
{
// Bild laden
BufferedImage img = loadTheImage();
int w = img.getWidth(), h = img.getHeight();
System.out.println("width: " + w);
System.out.println("height: " + h);
//System.out.println("image-type: " + img. getType());
for(int x=0; x<w; x++)
{
for(int y=0; y<h; y++)
{
int argb = img.getRGB(x, y); //liest den rgb-wert eines pixels aus
//int alpha = (argb >> 24) & 0xff; //zerlegt den argb-wert in alpha, r, g, b
int red = (argb >> 16) & 0xff;
int green = (argb >> 8) & 0xff;
int blue = (argb) & 0xff;
System.out.println("Pixel: " + "x=" + x + " , y=" + y);
System.out.println(/*"alpha=" + alpha + */ "R=" + red + " G=" + green + " B=" + blue);
System.out.println();
}
}
}
//_______________________________________________________________________________________________
protected static BufferedImage loadTheImage() //Funktion zum Laden eines Bildes
{
BufferedImage img = null; //das Bild
try
{
String dateiname = new String("D:/thesis/einfarbig.jpg");
FileInputStream in = new FileInputStream(dateiname); //aus Stream laden
JPEGImageDecoder decoder= JPEGCodec.createJPEGDecoder(in); //der Decoder
img = decoder.decodeAsBufferedImage(); //laden
in.close();
}
catch(Exception e)
{
System.out.print(e);
}
return img; //geladenes Bild zurückgeben
}
}
wo liegt das problem? wär sehr dankbar wenn ihr mir weiterhelfen könntet!
schönen sonntag,
lg katha
void farbeErmitteln(BufferedImage img,int startX,int startY)
{
for (int y = startY; y< img.height()(); y++) {
for (int x = startX; x < img.width(); x++) {
Color col = new Color(img.getRGB(x, y));
int roterAnteil=col.getRed();
int gruenerAnteil=col.getGreen();
int blauerAnteil=col.getBlue() ;
System.out.println(roterAnteil+"-"+gruenerAnteil+"-"+blauerAnteil);
}
}
mir ist gerade noch was aufgefallen, vielleicht könnte es ja da dran mit liegen. ich bin mir etwas unschlüssig:
wenn ich deine funktion einbaue, und in der main folgenden aufruf mache:
Code:
farbeErmitteln(img, 0, 0);
dann sagt er folgendes: Cannot make a static reference to the non-static method farbeErmitteln(BufferedImage, int, int) from the type main
was soll ich nun tun? wenn ich die funktion farbeErmitteln static mache, hab ich die ausgabe, die ich vorhin beschrieben habe...
Hy Kitkat, du kannst deine Funktion ruhig so lassen, bei mir funktioniert das einwandfrei. :wink:
Hast du das mal mit nem anderen testBild versucht?
Und hast du dir mal bei deinem die Pixel aus der Mitte angeguckt? Sind die richtig erkannt worden? Möglicherweise sind nur diie Ränder andersfarbig, weil Photoshop oder so da bissl weichgezeichnet hat. ???:L
hab ich gesehen
aber ich habs grad rausgefunden....... oh mann. hatte des bild noch als CMYK abvegespeichert. nun hab ichs im photoshop in rgb konvertiert. und nun gehts...naja was für ein blöder fehler. danke für deine hilfe!
noch ne andere frage hätte ich zu dem thema:
wie kann man am besten die farben von TIF-bildern auswerten?
Wenn du das änderst kannst du des mit JPG, GIF und PNG machen.
Andere Sachen gehen bestimmt auch, aber halt nicht so ohne weiteres. Vieleicht hat jemand schonmal was zum konvertieren von tif u. bmp geschrieben. Also vorstellen könnt ichs mir zumindest.
ich nochmal:
folgende fragen hätte ich noch:
wenn ich nun ein bild lade, wo geb ich nun den dateipfad ein? in der neuen zeile die du eingef+gt hast oder in meinem teil? was genau macht die zeile von dir chris?
was genau sagt das alpha aus bei der angabe des farbwertes?
Die neue Zeile lädt das Bild. Bei new File("") gibst du den Pfad zu dem Bild an. Deinen dadurch überflüssig gewordenen Code hab ich auskommentiert, der hat also keine Bedeutung mehr. Oh, ich seh grad ich hab die CodeTags vergessen -->*...edit*.