Bild(pixel) füllen

  • Themenstarter Themenstarter bildmatrix
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

bildmatrix

Gast
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?
 
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!
 
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?
 
Ein BufferedImage ist jedes beliebige Bild

Wenn du sowas speichern willst, geht das mit ImageIO.write(...) (einfach wieder hier danach suchen 😉)
 
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? 😀 ....
 
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?
 
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:

Code:
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);
	}

}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben