Gegenpart zu Paint

Allgemeine Themen rund um Java

Moderator: wegus

Antworten
Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Gegenpart zu Paint

Beitrag von Mungo1981M » 27.01.2013, 19:56

Mit der Paint Methode kann ich zum Beispiel auf ein Panel Zeichnen
Nun habe ich in das Panel ein Bild geladen, und brauche den
Farbwert am Punkt (x,y) wie heist hier der Befehl

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: Gegenpart zu Paint

Beitrag von Olek77 » 27.01.2013, 20:38

Hi Mungo,

Du suchst also den Farcode ( Rot/Grün/Blau , ... ) an Stelle X,Y?

Wenn du in der paint-Methode bist, hast du selber die Kontrolle über jeden Pixel an jeder Stelle.
Ich glaube unter WindowsXP ist standardmäßig die Hintergrundfarbe des aktuellen L&F an einer "normalen" Stelle eines Panels
zu erwarten.

Dies ist aber alles nicht wirklich sinnvoll zu hoffen.

Wenn du selber etwas in der paint-Methode schreibst schreibst du eben selber welche Farbe an welcher Stelle
auftreten soll.
Im Übrigen sollte man nicht paint( Graphics g ) überschreiben, sondern immer paintComponent( Graphics g ).
Erstere Methode zeichnet neben dem Inhalt deines Panels etc. auch den Rahmen und andere Dinge, von denen du
nichts ahnst.

Daher immer paintComponent nutzen. Das zeichnet wirklich nur in den Zeichenbereich der Komponente, die du
nutzt. Dazu sollte man - wenn man nicht komplett neuen Inhalt zeichnet - immer als erstes

Code: Alles auswählen

super.paintComponent( g );
aufrufen. Damit zeichnet deine Komponente erst mal das was es normalerweise zeichnen würde
und du kannst dann deine speziellen Änderungen danach reinschreiben.

Falls du den Farbwert des Bildes suchst solltest du einen Blick auf die Klasse
javax.imageio.ImageIO werfen
Dort liest erst dein Bild ein über eine der read-Methoden.
Dann hast du ein BufferedImage - das Format für jegliche Bildverarbeitung.
Dort rufst du

Code: Alles auswählen

int rgbInt = bufferedImage.getRGB( x, y );
auf.
Diesen Integer-Wert kannst du
nun als

Code: Alles auswählen

Color color = new Color( rgbInt );
nutzen.

Ok soweit?

Viele Grüße,

Olek
- Netbeans Certified Associate -

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Gegenpart zu Paint

Beitrag von Mungo1981M » 28.01.2013, 15:57

:D Danke für die Prompte Antwort,
hat mir wirklich weiter geholfen. :D

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Gegenpart zu Paint

Beitrag von Mungo1981M » 28.01.2013, 16:52

:( Hub's kleiner Aussetzer: :(
:oops: Wie bekomme ich ein mit paintComponent( Graphics g ) gezeichnetes Bild
in den Buffer hinein. :oops:

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: Gegenpart zu Paint

Beitrag von Olek77 » 28.01.2013, 21:42

Hi,

Was meinst du denn mit Buffer?

poste mal deinen code, der paintComponent/paint-Methode.

Das Bild was du irgendwo her hast, liegt doch als BufferedImage oder Image vor oder?
Wenn ja kannst du daraus auch die Pixel erfragen.

Viele Grüße,

Olek
- Netbeans Certified Associate -

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Gegenpart zu Paint

Beitrag von Mungo1981M » 21.02.2013, 20:30

:oops: Ich versuche es noch einmal dass Problem zu erklären :oops:

Z.B.:

:evil: Ich habe eine Klasse Kugel die von der Klasse Canvas Erbt.
In dieser Überschreibe ich die geschützte Methode paint
In dieser schreibe ich g.line(12,34,45,65);
Damit erhalte ich ein Bild. :evil:

:shock: Wie kann ich nun die Punkte in diesem Bild abfragen.
Es sei gegeben dass ich die Kordinaten der Linie vergessen habe.
Und diese nicht einfach daraus berechnen kann. :shock:

Für eine Antwort bin ich dankbar

Mungo1981M

8) P.S. Wenn ich das ganze mir als Image geben lassen könnte wäre ich sehr geholfen. 8)

Benutzeravatar
Olek77
Beiträge: 669
Registriert: 21.03.2009, 13:09

Re: Gegenpart zu Paint

Beitrag von Olek77 » 22.02.2013, 13:01

Hi,

Also du willst die Koordinaten der Pixel, die Start/End-Punkte einer Gerade sind
die du vorher in der paint-Methode gezeichnet hast?

Das ist ansich leicht. Du speicherst dir einfach die zu zeichnenden Koordinaten.
Z.b.als

Code: Alles auswählen

java.awt.Point
-Objekte in einer Liste von Point-Objekten.

Ansonsten ist es nicht trivial diese Koordinaten zu ermitteln.
Woher soll das Canvas wissen welche Koordinaten Teil der Linie sind und welche Hintergrund.

Wenn du mit Image/BufferedImage arbeitest zeichne doch direkt in das Bild.

Code: Alles auswählen

BufferedImage img = // wie du das Bild erzeugst sei dahin gestellt
public void paint( Graphics g ) {

Graphics2D g2d = img.createGraphics();

g2d.drawLine( ... );
// Wichtig: Am Ende immer dispose aufrufen
g2d.dispose();
}
Grüße,

Olek
- Netbeans Certified Associate -

Mungo1981M
Beiträge: 76
Registriert: 02.01.2013, 16:57

Re: Gegenpart zu Paint

Beitrag von Mungo1981M » 22.02.2013, 17:28

:P Danke:

:evil: 1. Die Punkte der Linie sind schwarz der Rest sein weiß
8) 2. Die Methode direkt in das Bild zu zeichnen ist
wunderbar.

Danke :P

Antworten