# getRGB()



## Kaladial (27. Aug 2008)

moin

ich hab da nen problem mit dem befehl getRGB

also ich habe ein grauwertbild das ich analysieren will ... 
dafür geh ich per doppelter for schleife jedes einzelne pixel durch und lasse mir den grauwert des pixels zurück geben ... das ergebnis stimmt aber nicht mit der aktuellen farbe überein ... 

also was ich eigentlich machen will: ich geb der funktion ne binärschwelle mit und wenn die pixel dunkler sind sollen sie schwarz dargestellt werden alles andere soll weis dargestellt werden...

im saveImg is halt das bild als BufferedImage geladen (aus einem .bmp)
das problem: die system.out funktion sagt mir was von wegen das die pixel hätten ne farbe von z.b. 121 in wirklichkeit (per paint farbtabelle getestet) ist die farbe aber z.b. 66 

wieso ist das so bzw wie kann ich das beheben?

code sieht so aus:


```
for(int y=0; y<saveImg.getHeight(); y++){
			for(int x=0; x<saveImg.getWidth(); x++){
				Color c=new Color(saveImg.getRGB(x, y));
				System.out.println(x+" "+y+" C2:"+c.getBlue()+" "+c.getGreen()+" "+c.getRed()+" "+c.getAlpha());
				if(c.getBlue()<=binschwelle){
					int rgb=Color.black.getRGB();
					erg.setRGB(x, y, rgb);
				}else{
					int rgb=Color.white.getRGB();
					erg.setRGB(x, y, rgb);
				}
			}
		}
```

mfg Kala


----------



## Kaladial (27. Aug 2008)

ich hab das jetzt nochmal angeguckt ... 
der wert ist auch nicht einfach nur zueinander falsch 

also ich hab mal nen bild probliert und die letzten 3 pixel angeguckt 

paint      mein program
67	163	
79	175
70	156


----------



## Quaxli (27. Aug 2008)

Mir ist nicht ganz klar, welche Werte Du da vergleichst. Ich habe Dein Problem mal bei mir nachvollzogen: Es macht einen Unterschied, ob man ein RGB-Bild untersucht, das nur graue Farben enthält oder z. B. mit GIMP ein Graustaufenbild erzeugt hat.

Einen richtig tollen Hinweis habe ich bis jetzt aber leider nicht gefunden.


----------



## 0x7F800000 (27. Aug 2008)

beim drüberschauen ist mir jetzt nichts merkwürdiges aufgefallen... Ausser in dem if-block die temporären variablen "int rgb"  überflüssig sind, aber das hat ja nichts mit der funktionsweise zu tun.

Dürfte ich nochmal nachfragen, was diese Zahlen bedeuten sollen? Gibst du nur eine Komponente an oder wie ist es? Wenn ja: welche?


... ?
Und wo hast du bei Paint überhaupt eine RGB-Anzeige gefunden? ???:L


----------



## Kaladial (27. Aug 2008)

also folgendes:

ich hab 1 bild (373x76): 

wenn ich das mit paint öffne und mit dem werkzeug die farbe des letzten pixels mit angucke bekomm ich den grauwert (r=g=b) 70

wenn ich nun das selbe bild per 


```
private BufferedImage saveImg = null;  
saveImg = ImageIO.read(f);  //f = das bild
```

öffne und die for schleife drüber laufen lasse gibt mir meine system.out anweisung den wert 156 aus und nicht 70... 

(ausgabe: 372 75 C2:156 156 156 255)

und genau das ist mein problem ... 
wieso macht der das so ? 
öffne ich das bild falsch oder muss ich das bufferedimage noch irgendwie definieren oder ka was da noch der fehler sein könnte...


----------



## Kaladial (27. Aug 2008)

@andrey: paint: 

per phiole das pixel markieren und dann über das menü:
farbe -> palette bearbeiten -> farben definieren sieht man den eingelesenen wert...


----------



## Kaladial (27. Aug 2008)

hmmm so wie es aussieht liegt es am abspeichern des bildes ... 

also dann ma ne andere frage: wie speichert man ein bild als bmp ich hab das bisher so gemacht: 


```
private void saveBild(){
		int pos_x=Integer.parseInt(""+model.data[4][1]);
		int pos_y=Integer.parseInt(""+model.data[5][1]);
		int size_x=Integer.parseInt(""+model.data[6][1]);
		int size_y=Integer.parseInt(""+model.data[7][1]);
		
		int bild_groesse_x=Cam.getBildBreite(0);
		int bild_groesse_y=Cam.getBildHoehe(0);
		
		int groesse=size_x*size_y;
		byte saveKlasBild[] = new byte[groesse];
		int a=0;
		int b=0;
		int x=0;
		LadeBild.Lade_Bild(0, 5);
		for(int i=0; i<LadeBild.savebild.length; i++){
			if((i>=((bild_groesse_x*pos_y+a)+pos_x))&&(i<((bild_groesse_x*pos_y+a)+(pos_x+size_x)))){
				saveKlasBild[x]=LadeBild.savebild[i];
				x++;
			}
			if(i>((bild_groesse_x*pos_y+a)+(pos_x+size_x))){
				b++;
				a=bild_groesse_x*b;
				if(b>=size_y){
					break;
				}
			}
		}
		
		BufferedImage img = new BufferedImage(size_x, size_y, BufferedImage.TYPE_BYTE_GRAY); 
		img.getRaster().setDataElements(0, 0, size_x, size_y, saveKlasBild); 
		writeIMG(img, "aktuellerFont.bmp");
	}

	public void writeIMG(BufferedImage buffimg, String fileName){
        try{
        	ImageIO.write(buffimg,"BMP",new File("font/"+fileName));
        }catch(IOException ioe){}
    }
```

wenn ich dieses bild nun aber mit paint öffne und dann wieder abspeichere stimmen die pixel farbwerte die mir getRGB ausgibt


----------



## 0x7F800000 (27. Aug 2008)

okay... und wer hat recht? was sagt das auge? hast du es schon an irgendeinem einfachen beispiel ausprobiert, etwa an einem 2x2 großen bitmap mit vier pixeln rot, grün, blau & schwarz oder so? was meldet das programm dann?

...und überhaupt, wieso interessiert dich denn so sehr, was paint sagt? M$ anwendungen bauen doch andauernd irgendwelchen mist  das betrifft insbesondere paint^^ Ich raffs nicht, seit wieviel Generationen sind die leute zu faul, um die Spray-dose irgendwie ordentlich zu implementieren, dass sie nicht diese hässliche pixelklekse liefert? Bei Ubuntu kriegt man völlig kostenlos GIMP mitgeliefert, und bei der megateueren Vista gibts immer noch nur diese hässlichen pixelklekse, merken die leute denn nicht, dass das be*#!§ene programmchen absolut für nichts zu gebrauchen ist? omfg  :roll:


----------



## Kaladial (27. Aug 2008)

ok es war das abspeichern... ich habs jetzt thx ...

es lag dran das ich ein type_byte_gray als bufferedimage benutzt hab und ein type_int_rgb hätte verwenden müssen


----------



## 0x7F800000 (27. Aug 2008)

byte arrays? raster? was soll das alles werden?
http://java.sun.com/j2se/1.4.2/docs...enderedImage, java.lang.String, java.io.File)
ein aufruf reicht eigentlich auch schon...

wobei ich
1) nicht sicher bin, ob das auch bitmaps abschpeichern kann
2) nicht weiß, wozu bitmaps gut sein sollen, GIF's verlieren doch auch nichts, wenn man's genau haben will.


----------



## Kaladial (27. Aug 2008)

@andrey: man muss nur wissen wie man mit windows umgehn muss dann kann man da auch so gut wie alles machen  ich arbeite auch mit unix und muss immer noch sagen das mir windows besser gefällt ... aber is auch egal für das was ich wollte hat paint ausgereicht und hat mir den fehler gezeigt ... 

und die klösung hab ich nu auch also von daher ... erledigt


----------

