# image.setRGB() zeichnet falsch



## hongkongwuji (27. Mrz 2008)

Hallo, 

ich ziehe Informationen in einem Wertebereich zwischen 0 und 1 aus einer Matrix, aus denen ich ein Bild erzeuge. Diese multipliziere ich mit 255 um auf die gewünschten 8bit zu kommen, die der Typ BufferedImage.TYPE_INT_RGB erwartet.

Probleme:

Wie übergebe ich den Wert für alle drei Kanäle (hätte das gerne zwischen 0 und 255 als Graustufen)? Die Methode erwartet image.setRGB(x,y,int), wie aber übergebe ich die anderen Werte wenn ich ein Farbbild generieren möchte?

Das Bild das ausgegeben wird enthält andere Werte als die, die ich übergebe. Das größte Problem besteht aber darin, dass die Pixel in horizontaler Richtung vom Wert identisch sind!!!??? Auch diese Werte werden korrelt übergeben!! Irgendeine Idee?

Anbei der Code der die Matrix durchläuft und die Pixel setzt:


```
for (x_dir = 0; x_dir < valuematrix.length; ++x_dir) {
			for (y_dir = 0; y_dir < valuematrix[x_dir].length; ++y_dir) {
				rgb_f = valuematrix[x_dir][y_dir].getIntense();
				if (rgb_f < 0) {
					rgb_f = 0;
				}
				if (rgb_f > 1) {
				rgb_f = 1f;	
				}
				rgb_f = rgb_f * 255;
				rgb = (int) rgb_f;
				System.out.println("x_y_rgb " + x_dir +" "+ y_dir + " " + rgb + " " +     rgb_f);
				image.setRGB(x_dir, y_dir, rgb);
		
			}// end for 1
		}// end for 2
```

Hier das Bild das erzeugt wird:


http://www.fotocommunity.de/pc/pc/display/12307672

vielen Dank für Eure Hilfe

Daniel


----------



## Maeher (27. Mrz 2008)

Ich würde folgendes vorschlagen:

```
image.setRGB(x,y,new Color(r,g,b,a).getRGB());
```
(Geht auch ohne Alpha Wert)


----------



## hongkongwuji (27. Mrz 2008)

Wunderbar, sieht gut aus. Jetzt muss ich nur noch den blöden Versatz rauskriegen. 

vielen Dank für Deine schnelle Antwort

Daniel

P.S. Die Fehler sind alle behoben!!!!! nochmals Danke!


----------



## EgonOlsen (27. Mrz 2008)

Maeher hat gesagt.:
			
		

> Ich würde folgendes vorschlagen:
> 
> ```
> image.setRGB(x,y,new Color(r,g,b,a).getRGB());
> ```


Oder schneller ohne den Umweg über Color:


```
image.setRGB(x,y,r<<16|g<<8|b);
```

Oder auch mit Alpha:


```
image.setRGB(x,y,a<<24|r<<16|g<<8|b);
```


----------

