AWT setRGB() funktioniert nicht

Furtano

Mitglied
Hi,
ich möchte erst mal alle Pixel in einem Bereich gruen malen.
Er malt die Pixel aber immer schwarz, egal welche Farbe ich angebe.

ColorSeperation.java
Java:
package htw;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;


public class ColorSeperation extends Panel {

	private int[][] colorArray;
	private int x;
	private int y;
	private int seperationType;
	private int width;
	private int height;
	
	// Erst wenn der Farbauszug erzeugt wurde, dann zeichne das Bild
	private boolean colorSeperationIsReady;
	
	private BufferedImage farbauszug;
	private Image farbauszugImage;
	
	/**
	@brief Erstellt und BERECHNET EIN FARBAUSZUG und MALT es
	@param int[][] 3fach Array (RGB) der Farben des Bildes
	@param x X-Koordinate wo das Histogramm gezeichnet wird
	@param y Y-Koordinate wo das Histogramm gezeichnet wird
	@param seperationType || 0 == ROT, 1 == GRUEN, 2 == BLAU
	@param width Breite des Farbauszuges
	@param height Hoehe des Farbauszuges
	*/
	ColorSeperation (int[][] colorArray, int x, int y, int seperationType, int width, int height){
		
		this.colorArray = colorArray;
		this.x = x;
		this.y = y;
		this.seperationType = seperationType;
		this.width = width;
		this.height = height;
		this.colorSeperationIsReady = false;
		this.farbauszug = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		
		
		
	}
	/**
	 * @brief Wandelt das RGB-int Array in ein Bild um, damit es gemalt werden kann
	 */
	void createColorSeperation (){

		// Nummer des Pixels im RGB-Array
		int pixelNumber = 0;
		int actualColorPixel = 0;
		// Raster raster = farbauszug.getRaster();
		//
		// Soll ein R- ein G- oder ein B-Farbauszug gezeichnet werden 
		//
		// ROT
		if (seperationType == 0){
			
			// Gehe Zeile fuer Zeile durch
			for (int x = 1; x < height; x++){
				
				// Jedes Pixel einzeln setzen
				for (int y = 1; y < width ; y++){
					// Setze den Pixel im Farbauszug
//					farbauszug.setRGB(300, 300, 3096);
					//actualColorPixel = raster.getSample(y, x, 0);
					// setze gruene Pixel
					farbauszug.setRGB(width-1, height-1, 0xFF00FF00);

					//System.out.println(colorArray[0][1]);
					// Gehe weiter zum naechsten Pixel
					pixelNumber++;
				}
			}
			// fertig, jetzt kann gezeichnet werden
			colorSeperationIsReady = true;
			//System.err.println("Fehler: falscher seperationType ausgewaehlt! Es gibt nur 0(R), 1(G) und 2(B).");

		}
		
		// GRUEN
		else if (seperationType == 1){
			
		}
		
		// BLAU
		else if (seperationType == 2){
			
		}
		
		// Fehler
		else{
			System.err.println("Fehler: falscher seperationType ausgewaehlt! Es gibt nur 0(R), 1(G) und 2(B).");
		}
		
		
	}


	public void update(Graphics g) { //Example2409.java
		   paint(g);
		}

	
	/**
	 * Zeichne den Farbauszug
	 */
	@Override
	public void paint(Graphics g) {
		
		// Das Bild zum Zeichnen liegt vor
		if (colorSeperationIsReady){
			farbauszugImage = Toolkit.getDefaultToolkit().createImage(farbauszug.getSource());
			g.drawImage(farbauszugImage, x, y, this);			
		}
		super.paint(g);
		
	}
}

window.java

Java:
	     // Gib mir das Bild als RGB-int Array
	     rgbColorsForPicture = ImageToolK.readRGBvalues(pictureForColorSeperation);
	     // Erstelle den roten Farbauszug
	     ColorSeperation farbauszugRot = new ColorSeperation(rgbColorsForPicture, 0, 0, 0, actualScalation1[0], actualScalation1[1]);
	     farbauszugRot.createColorSeperation();
...

Java:
  /**
	      * FUEGE FARBAUSZUG HINZU
	      */
	     gbc = makegbc(1, 0, 1, 1);
	     gbc.fill = GridBagConstraints.BOTH;
	     gbc.anchor = GridBagConstraints.NORTH;
	     gbc.weightx = bild.getWidth(null);
	     gbc.weighty = bild.getHeight(null);
	     // Constraints dem Bild zuweisen
	     gbl.setConstraints(farbauszugRot, gbc);
	     this.add(farbauszugRot);
...
 
> farbauszug.setRGB(width-1, height-1, 0xFF00FF00);
du verwendest nicht x und y der Schleifen
 
nicht das Sehen ist wichtig, sondern das allgemeine Grundverständnis,
mit ein paar Regeln ist jeder Fehler rein automatisch zu finden,

ob man auf einem BufferedImage überhaupt Pixel setzen kann ist in einem viel kürzeren Programm leicht zu testen,
wenn das geht ist der Rest nur noch die Suche nach der einen Nadel im Heuhaufen,
die Logik beweist dass sie da ist, sie selber zu finden ist die wahre Programmierfähigkeit
 

Zurück
Oben