# WritableRaster -> BufferedImage .. falsche Farben



## teppi (3. Dezember 2005)

Hallo,

ich kreiere aus einem BufferedImage ein WritableRaster .. von diesem WritableRaster erzeuge ich ein kleineres WritableRaster, welches sich dort drin befindet. Wenn ich das neue WritableRaster einem neuen Bild hinzufüge werden die Farben fasch dargestellt. 

Was mach ich falsch? 


```
this.mainRaster = mainMapImage.getRaster();
		
		System.out.println(mainRaster.getHeight());
		
		// entsprechenden Bereich ausschneiden
		this.tempRaster = mainRaster.createWritableChild( imageWidth , imageHeight, imageWidth , imageHeight , 0 , 0 , new int[]{0});
		
		// hier die kritische Stelle .. 
		this.visibleMapImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_BYTE_INDEXED);
						
		visibleMapImage.setData(this.tempRaster);
		
		this.myMap.setImage(visibleMapImage);
```

Und hier ein Bild wies aussieht: das Grün sollte eher ein Rosa sein oder so .. 
Screenshot 

Und hier wie das Bild reinkommen müsste:
Karte 

Danke schön!


----------



## Thomas Darimont (3. Dezember 2005)

Hallo!

 Ich denke die Falschfarbendarstellung entsteht dadruch, dass du dieses child BufferedImage mit einem BufferedImage.TYPE_BYTE_INDEXED erstellst. Du solltest schon den selben Typ wie des parent Image benutzen...

 Verwende doch den passenden Konstruktor 
 Schau mal hier:

```
/**
  * 
  */
 package de.tutorials;
 
 import java.awt.image.BufferedImage;
 import java.awt.image.WritableRaster;
 import java.io.File;
 
 import javax.imageio.ImageIO;
 import javax.swing.ImageIcon;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 
 /**
  * @author Thomas
  * 
  */
 public class ImageExample {
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) throws Exception {
 		BufferedImage image = ImageIO.read(new File("c:/winter.jpg"));
 		WritableRaster writableRaster = image.getRaster();
 		
 		WritableRaster childRaster = writableRaster.createWritableChild(0,0,100,100,0,0,null);
 		BufferedImage childImage = new BufferedImage(image.getColorModel(),childRaster,image.isAlphaPremultiplied(),null);
 		
 		JFrame frm = new JFrame("ImageExample");
 		frm.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
 		frm.add(new JLabel(new ImageIcon(childImage)));
 		frm.pack();
 		frm.setVisible(true);
 	}
 
 }
```

btw. was willst du damit eigentlich machen? Wenn du nur einen kleinen Bildausschnitt eines groessen Bildes haben moechtest koenntest du auch getSubImage(...) verwenden.

 Gruss Tom


----------



## teppi (3. Dezember 2005)

Oh mein Gott, die Funktion hab ich glatt übersehen .. Die ist natürlich viel praktischer. Ich hatte vorher ein Projekt, wo ich an den Pixeln rumwerkeln musste. Ich bin scheinbar etwas betriebsblind geworden. 

Vielen Dank,
schönen Abend wünsch ich dir,
Stefan


----------

