Pixelfarbe von Panel ermitteln

Status
Nicht offen für weitere Antworten.

FKorni

Mitglied
Schreib gerade ein Programm in Java, nun würde ich aber gerne wissen wie ich die Farbe eines Pixels von einem Panel ermittle. Ich finde zwar im Internet eine menge Befehle aber keiner funktioniert, bzw. ich weiß nicht genau wie ich die verwenden muss.

Würde mich über eure Hilfe freuen.:)
 
Zuletzt bearbeitet:

Schandro

Top Contributor
eine Möglichkeit:

du erstellst ein neues BufferedImage und gibts dessen Graphics-Object an die paintComponent Methode des JPanels. Danach kannst du mit
myBufferedImage.getData().getPixel(...)
die Pixels auslesen.

Ob das der beste Weg ist, weiß ich net
 
Zuletzt bearbeitet:

heart_disease

Bekanntes Mitglied
Ich hab's nicht ausprobiert, aber nach der Java API sollte das hier funktionieren:
Java:
JPanel.getColorModel().getRGB( int pixel )

getColorModel() ist aber eine dynamische, keine statische Funktion. JPanel musst du also hier klarerweise durch die Instanzvariable ersetzen. Die Methode getRGB() gibt dann den Farbwert des gewünschten Pixels als int zurück.
 

FKorni

Mitglied
Danke für eure Antworten.

Nur irgendwie hab ich immer noch keinen Plan^^

@Schandro kannst du mir bitte mal einen Beispielcode mit deiner Funktion geben?

@heart_disease hab deine Funktion gleich mal ausprobiert, ich bekomme jetzt Werte wie "-16777213", was mach ich jetzt damit? Brauch ja die Farbe bei einer bestimmten Stelle, aber ich kann ihm ja nicht mal die x und y Werte mit geben oder ich weiß nicht wie ich ihm die mitgebe? :noe:
 

Schandro

Top Contributor
ohne zu testen:
Java:
BufferedImage img = new BufferedImage(panel.getSize().width,panel.getSize().height,BufferedImage.TYPE_INT_RGB);
Graphics g = img.createGraphics();
panel.paintComponent(g);
int[] thePixel = img.getData().getPixel(10,20,null);

€dit:
habs mal grad selber kurz ausprobiert und es hat immer 238 238 238 in thePixel ergeben...
k.A.
 
Zuletzt bearbeitet:

FKorni

Mitglied
Danke, aber es funktioniert nicht. :(

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems:
The method paintComponent(Graphics) from the type JComponent is not visible
The method getPixel(int, int, int[]) is ambiguous for the type Raster

Ok das erste Problem hab ich gelöst, es gehört paintComponents, bleibt aber immer noch das Problem mit getPixel.
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Java:
int[] thePixel = img.getData().getPixel(10,20,(int[])null);
ob die Lösung insgesamt überhaupt funktioniert musst du ausprobieren.
 

Schandro

Top Contributor
Beispielcode dafür das es doch geht:
Java:
import javax.swing.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

public class XXX{

	public static void main(String[] args){
		new XXX();}


	private JFrame window = new JFrame();
	private JPanel panel = new JPanel();

	public XXX(){
		window.setBounds(100,100,200,200);

		window.add(panel);
		panel.setLayout(new GridLayout());

		JButton button = new JButton("Hallo");
		button.addActionListener(actionListener);
		panel.add(button);

		JButton button2 = new JButton("Welt!");
		button2.addActionListener(actionListener);
		panel.add(button2);


		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				window.setVisible(true);
			}
		});

	}

	ActionListener actionListener = new ActionListener(){
		public void actionPerformed(ActionEvent event){

			try{Thread.sleep(500);}catch(Exception e){e.printStackTrace();}

			final BufferedImage img = new BufferedImage(panel.getSize().width,panel.getSize().height,BufferedImage.TYPE_INT_RGB);
			panel.paintComponents(img.createGraphics());
			JFrame shower = new JFrame();
			JPanel showerPanel = new JPanel(){
				public void paintComponent(Graphics g){
					super.paintComponent(g);
					g.drawImage(img,0,0,null);
				}
			};
			showerPanel.addMouseListener(new MouseAdapter(){
				public void mouseReleased(MouseEvent event){
					System.out.println(Arrays.toString(img.getData().getPixel(event.getX(),event.getY(),(int[])null)));
				}

			});
			shower.add(showerPanel);
			shower.setSize(img.getWidth(null),img.getHeight(null)+23);
			shower.setVisible(true);
		}
	};


}
:)
 

FKorni

Mitglied
Danke, so funktionierts, aber sobald ich das in mein Programm integriere dann geht nichts mehr.
Und ich hab auch keinen Plan wie ich das jetzt richtig in mein Programm integriere.

Java:
public void Überprüfung(int x, int y){
		Graphics g=jPanel.getGraphics();
				
		BufferedImage img = new BufferedImage(jPanel.getSize().width,jPanel.getSize().height,BufferedImage.TYPE_INT_RGB);
		jPanel.paintComponents(g);
		int[] thePixel = img.getData().getPixel(100, 100, (int[]) null);
		
		
		System.out.println(Arrays.toString(thePixel)); //Test
	}

So hab ich das jetzt, nur dann bekomme ich wie gesagt nur 3 0er. ;( (die Smileys sind einfach genial)
 

Schandro

Top Contributor
mmh. Debugge mal ein bisschen. bau mal den Code ein damit du siehst wie das Bild aussieht von dem du das Pixel haben willst:
Java:
            JFrame shower = new JFrame();
            JPanel showerPanel = new JPanel(){
                public void paintComponent(Graphics g){
                    super.paintComponent(g);
                    g.drawImage(img,0,0,null);
                }
            };
            showerPanel.addMouseListener(new MouseAdapter(){
                public void mouseReleased(MouseEvent event){
                    System.out.println(Arrays.toString(img.getData().getPixel(event.getX(),event.getY(),(int[])null)));
                }
 
            });
            shower.add(showerPanel);
            shower.setSize(img.getWidth(null),img.getHeight(null)+23);
            shower.setVisible(true);
(Das ist einfach ein Teilstück von meinem Code oben.)

Und schreib lieber createGraphics statt getGraphics.
 

Wildcard

Top Contributor
Das ist falsch:
Java:
        Graphics g=jPanel.getGraphics();
                
        BufferedImage img = new BufferedImage(jPanel.getSize().width,jPanel.getSize().height,BufferedImage.TYPE_INT_RGB);
        jPanel.paintComponents(g);
        int[] thePixel = img.getData().getPixel(100, 100, (int[]) null);
Du brauchst das Graphics Objekt des BufferedImage, nicht von jPanel
 

FKorni

Mitglied
Wenn ich deinen Code einbaue dann bekomme ich ein schwarzes Fenster/Bild, was dann wieder dem 0, 0, 0 entspricht...

Was ist den ganau der Unterschied zwischen createGraphics und getGraphics?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Pixelfarbe abgleichen funktioniert nicht AWT, Swing, JavaFX & SWT 5
V 2D-Grafik Schnelles ändern von Pixelfarbe in BufferedImages AWT, Swing, JavaFX & SWT 4
P Pixelfarbe erkennen - funktioniert nicht AWT, Swing, JavaFX & SWT 8
T Pixelfarbe auslesen AWT, Swing, JavaFX & SWT 4
J Pixelfarbe auslesen AWT, Swing, JavaFX & SWT 3
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
B JTextField in Panel positionieren AWT, Swing, JavaFX & SWT 1
R Swing Panel nur bei Maus sichtbar AWT, Swing, JavaFX & SWT 2
B mit Maus verschiebbares Panel AWT, Swing, JavaFX & SWT 2
S Labels in Panel erstellen AWT, Swing, JavaFX & SWT 1
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
CptK Swing DropdownMenu über Panel-Grenzen hinaus anzeigen AWT, Swing, JavaFX & SWT 1
J Aufklappbares Panel in Toolbar AWT, Swing, JavaFX & SWT 6
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
B AWT Panel größe im BorderLayout einstellen AWT, Swing, JavaFX & SWT 1
K Swing Entfernen von Panel funktioniert nicht AWT, Swing, JavaFX & SWT 5
L JavaFX Animation für Panel wechsel AWT, Swing, JavaFX & SWT 3
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
A Swing Panel mit ScrollBar AWT, Swing, JavaFX & SWT 7
K Panel verdeckt MenuItem AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
P AWT Panel überschreibt vorheriges... AWT, Swing, JavaFX & SWT 2
Thallius Swing Warum kann man Texte im Panel nicht markieren? AWT, Swing, JavaFX & SWT 1
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
M JavaFX Slide Panel AWT, Swing, JavaFX & SWT 2
P Swing Panel nicht sichtbar AWT, Swing, JavaFX & SWT 1
M Swing JtextField Panel in ander Panel aufrufen AWT, Swing, JavaFX & SWT 0
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
D Panel wird nicht angezeigt und Fragen zum CardLayout AWT, Swing, JavaFX & SWT 6
S Swing JMenu löscht auf panel gezeichnetes AWT, Swing, JavaFX & SWT 3
X Java Panel zeitweise repainten AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
B zweidimensionales Buttonarray auf Panel AWT, Swing, JavaFX & SWT 11
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
F textarea lässt panel verschwinden AWT, Swing, JavaFX & SWT 4
T LayoutManager GridLayout panel.setSize funktioniert nicht AWT, Swing, JavaFX & SWT 1
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
E Panel mit Leben füllen AWT, Swing, JavaFX & SWT 2
K Swing Maus in Panel einsperren AWT, Swing, JavaFX & SWT 8
D Panel in Panel zentriert nicht richtig AWT, Swing, JavaFX & SWT 3
P Swing Panel-austausch über einen MenuListener AWT, Swing, JavaFX & SWT 2
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
P Swing Button über gesamtes Panel AWT, Swing, JavaFX & SWT 2
O LayoutManager Panel in Panel "maximieren" AWT, Swing, JavaFX & SWT 2
C AWT Horizontale Linie in einem Panel AWT, Swing, JavaFX & SWT 12
T Über mehrere Panel zeichnen AWT, Swing, JavaFX & SWT 2
B Export eines Panel mit ScrollBar AWT, Swing, JavaFX & SWT 4
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
bluerob Panel im BorderLayout South wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
M Swing Panel klassenübergreifend ändern AWT, Swing, JavaFX & SWT 6
M Swing JFrame in einem Panel zeichnen AWT, Swing, JavaFX & SWT 3
A 2D-Grafik Panel inhalt löschen AWT, Swing, JavaFX & SWT 5
H Scroll Panel wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 6
S Elemente im Panel in richtige Ausgangsstellung bringen AWT, Swing, JavaFX & SWT 10
X Swing Panel Extra Klasse & Aufruf über Button AWT, Swing, JavaFX & SWT 18
Kenan89 2D-Grafik paintComponent quetsch alles in Panel AWT, Swing, JavaFX & SWT 26
C Bild auf Panel vergrößern und verschieben AWT, Swing, JavaFX & SWT 4
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
H LayoutManager Panel verschieben sich AWT, Swing, JavaFX & SWT 5
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
S Vaadin: Panel AWT, Swing, JavaFX & SWT 10
R paintComponent malt bei repaint() Rahmen um Panel AWT, Swing, JavaFX & SWT 7
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
K Panel zu Laufzeit ändern AWT, Swing, JavaFX & SWT 6
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
D Panel aus externer Klasse holen AWT, Swing, JavaFX & SWT 2
L Swing dynamisches Image-Panel in Layout einbinden AWT, Swing, JavaFX & SWT 10
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
H Verschiedene JPanels aus eigenen Klassen in JFrame einfügen, nur ein Panel sichtbar AWT, Swing, JavaFX & SWT 4
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
U Elemente im Panel zentrieren mit GridLayout AWT, Swing, JavaFX & SWT 3
J JPanel mit anderem Panel aus anderer Klasse setzen AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Panel-Zeichnung erscheint nicht AWT, Swing, JavaFX & SWT 7
S Panel rapaint AWT, Swing, JavaFX & SWT 18
T AffineTransform wirkt sich nur auf dem ersten Panel aus AWT, Swing, JavaFX & SWT 3
K Swing: Panel in Panel erzeugen AWT, Swing, JavaFX & SWT 11
M Panel in SWT einfügen AWT, Swing, JavaFX & SWT 12
T auf Panel zeichnen AWT, Swing, JavaFX & SWT 4
A FormLayout Panel-Breite AWT, Swing, JavaFX & SWT 7
Dit_ "Expandable" Panel ? AWT, Swing, JavaFX & SWT 6
A Panel-Unterklasse funktioniert nicht AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben