# Bild(pixel) füllen



## bildmatrix (2. Mai 2007)

Hallo,

ich habe momentan einen  doppelten array (matrix) wo integer Wert drinstehen.
ich möchte jetzt ein Bild erzeugen für jede position in dem Array ein (pixel)
und diesen mit der Stärke-Schwarz( zahl im array) füllen. Also z.B in der Matrix steht an zeile=0; spalte=0, die Zahl=0,
also muss die erste pixel in dem Bild (weiß) sein. wenn Zeile=1,Spalte=0; die Zahl=50; steht, dann muss 2te Pixel so halb schwarz sein(grau)
geht das überhaupt mit java?


----------



## thE_29 (2. Mai 2007)

Jo geht!

BufferedImage mit dem erstellst du dir dein Img und mit getRaster bekommst du nen writableraster zurück, bei dem man die Pixel setzen kann!

Einfach mal nach BufferedImage und (Writable))Raster suchen!


----------



## bildmatrix (2. Mai 2007)

hm ich krieg das irgendwie nicht hin....
// TODO Auto-generated method stub
		int width = 100;
	    int height = 100;

	    // Create buffered image that does not support transparency
	    BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

wo kann ich jetzt angeben welches format und wo das bild erzeugt werden soll?
hat jemand vlt. ein gutes beispiel?


----------



## thE_29 (2. Mai 2007)

Ein BufferedImage ist jedes beliebige Bild

Wenn du sowas speichern willst, geht das mit ImageIO.write(...) (einfach wieder hier danach suchen )


----------



## bildmatrix (2. Mai 2007)

hm..momentan bin ich etwas durcheinander 

ich hab eine Matrix mit 4 Werten drin (intensität).

jetzt will ich ein rechteck erzeugen mit 4 pixeln und diese mit der intensität, die in der Matrix stehen färben.

wenn matrix 9 Werte hat, dann sollte auch rechteck mit 9 Pixeln enstehen...und das sollte in irgendeinem Format (gif, jpg) abgespeichert werden. Ich brauch möglichst einfache und shcnelle lösung. Hast du vlt. irgendwo ein Beispiel dazu? ich find irgendwie nichts was ich verstehe  


 BufferedImage bufferedImage = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);


    Graphics g = bufferedImage.getGraphics();
    g.drawString("www.java2s.com", 20,20);
    // Get a pixel
//  Get all the pixels
    int w = bufferedImage.getWidth(null);
    int h = bufferedImage.getHeight(null);

damit erzeuge ich schon ein bild? und wie sag ich jetzt mal mir ein rechteck?  ....


----------



## bildmatrix (2. Mai 2007)

also ich kann schon ein rechteck hinmalen und einen punkt anfärben... wie kann ich jetzt festlegen, dass das rechteck nur aus 4 pixel bestehen soll? 

		String filename="C:\\bild.png";
		int x=50,y =50;
		int height=100;
		int width=100;
		// TODO Auto-generated method stub
		BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
		WritableRaster myRaster=img.getRaster();

		System.out.println(myRaster);
		  // Set a pixel
		int rgb = img.getRGB(x, y);
		rgb = 0xFF00FF00; // green
	    img.setRGB(x, y, rgb);

		ImageIO.write(img, "png", new File(filename));

in my Raster stehen jetzt die einzelnen pixel oder?


----------



## Quaxli (2. Mai 2007)

Was bringt dieses WriteableRaster eigentlich? Ich persönlich habe es bisher nicht verwendet.
Ein geeignetes BufferedImage kann man doch mit folgendem Konstruktor generieren:

BufferedImage(int width, int height, int imageType) 

also z. B.:

BufferedImage bi = new BufferedImage(3,3,BufferedImage.TYPE_INT_RGB);

Und wenn man da einmal in der Länge und Breite drüber-loopt kann man nit setRGB(...) doch alles abdecken. Ich lerne natürlich gerne noch was dazu. 

Hier mal ein Code-Beispiel von mir:


```
import java.awt.*;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;


public class Test extends JFrame{

	BufferedImage bi;
	
	public static void main(String[] args) {
	  new Test();
	}
	
	public Test(){
		super("Test");
		setSize(300,300);
		setLocation(100,100);
		this.setForeground(Color.black);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		createImage();
		setVisible(true);
		
		
	}
	
	private void createImage(){
		
		bi = new BufferedImage(5,5,BufferedImage.TYPE_INT_RGB);
		
		int count = 0;
		
		for(int x=0;x<bi.getWidth();x++){
			for(int y=0;y<bi.getHeight();y++){

				count++;
				if(count%2==0){
					bi.setRGB(x, y, Color.red.getRGB());
				}else{
					bi.setRGB(x, y, Color.green.getRGB());
				}
				
			}
		}
		
		
	}
	
	public void paint(Graphics g){
		super.paint(g);
		g.drawImage(bi, 100, 100, this);
	}

}
```


----------

