Java2D Transparenz geht bei einfärben verloren

conehead

Mitglied
Moin.
Hoffe ihr könnt mir wieder mal helfen.

Erst einmal kurz mein vorhaben:
Ich wollte mich etwas mit Java2D auseinandersetzen.
Dazu habe ich eine einfache, kleine Particleengine geschrieben.

Ich habe einen Punkt, aus dem viele Sterne kommen sollen und diese sollen ein Stück weit fliegen und sich dann langsam auflösen (und dabei die Farbe ändern). Als Particle soll ein einfaches 32-Bit PNG genommen werden.
Es ist ein weißer Stern auf transparentem Hintergrund.
Wenn ich das ganze komplett ohne Farbe zeichnen lasse, funktioniert es ganz gut, wie man auf dem schwarz/weiß Bild sehen kann, sind die Sterne transparent.
Sobald ich aber Farbe hinzufüge, wird das gesamte 32x32px Bild eingefärbt und nicht nur der Stern, wie ich es gerne hätte.
Also kann es ja eigentlich nicht am Bild selbst liegen?!

Naja einfach nur mal ein wenig Quelltext, wie ich das Bild lade und zeichne:

Java:
//Farbangaben inc. Alphawert
public Color beginColor = new Color(0,255, 210,255);
public Color endColor = new Color(255, 246, 0,0);
//Laden des Bildes
ImageIcon i = new ImageIcon("star.png");
Image texture = i.getImage();
//Ausgeben des Bildes ohne Farbe (Bild1)
g2d.drawImage(texture, (int) particleList.get(i).position.x,(int) particleList.get(i).position.y, null);
//Ausgeben des Bildes mit Farbe (Bild2)
g2d.drawImage(texture, (int) particleList.get(i).position.x,(int) particleList.get(i).position.y, particleList.get(i).color, null);

Das sollten eigentlich schon alle relevanten Stellen sein.
Ich habe schon etwas mit setComposite rumgespielt, jedoch mit genau dem selben Ergebnis.

Vielleicht ist es ja ganz einfach?
Hoffe ihr habt ein paar Tipps für mich!
Danke schonmal!

MfG

conehead
 

Anhänge

  • star.png
    star.png
    3,5 KB · Aufrufe: 40
  • 1.jpg
    1.jpg
    70,4 KB · Aufrufe: 26
  • 2.jpg
    2.jpg
    84,3 KB · Aufrufe: 27

Michael...

Top Contributor
Steht der Code so bei Dir in der paintComponent?

So geht es schon mal nicht ;-) siehe Kommentar zur Methode:
API Doku hat gesagt.:
public abstract boolean drawImage(Image img,
int x,
int y,
int width,
int height,
Color bgcolor,
ImageObserver observer)

Draws as much of the specified image as has already been scaled to fit inside the specified rectangle.

The image is drawn inside the specified rectangle of this graphics context's coordinate space, and is scaled if necessary. Transparent pixels are drawn in the specified background color. This operation is equivalent to filling a rectangle of the width and height of the specified image with the given color and then drawing the image on top of it, but possibly more efficient...
Musste eigentlich mit Hilfe von AlphaComposite möglich sein. Erst die Sterne zeichnen und dann ein farbiges Rechteck mit passendem AlphaComposite (müsste da erst mal nachschauen) über den "Sternenhaufen" malen. Das geht allerdings nicht direkt auf die Komponenten, sondern nur mit einem ARGB BufferedImage.
 

conehead

Mitglied
Nein, natürlich ist es nicht alles beieinander, sondern an 2 Stellen im Quellcode.

Einmal der Initialisierung und dann halt eine eigene Paint-Methode.

Dann muss ich mir das noch einmal genauer anschauen mit dem ARGB BufferedImage.
Vielleicht ist es ja wirklich die Lösung, denn anschließend drüberzeichnen habe ich noch nicht ausprobiert.


Ich werds mal testen, eventuell hat ja jemand solange noch weitere Tipps für mich.

//Achja, da fällt mir gerade ein:
Wenn ich den Stern erst zeichnen lasse, dann kann ich ihm ja nachträglich auch keine Transparenz hinzufügen, oder? Also müsste ich ihn auch das erste mal mit getComposite zeichnen lassen und somit beispielsweise die 255 aus der Color in 1.0f umwandeln?

Oder habe ich da einen Denkfehler?
 

Michael...

Top Contributor
Das png ist ja transparent.
Dieses einfach an die gewünschten Positionen auf ein transparentes Image(ARGB BufferedImage) zeichnen. Dann ein AlphaComposite auf dessen Graphics Objekt setzen (könnte SRC_IN sein) und damit das farbige Rechteck auf des Image zeichnen.
In der paint... dann das Image zeichnen.
 

conehead

Mitglied
Ah vielen Dank!
Genau das was ich gesucht habe.

Hab ich wohl leider nach den falschen Begriffen gesucht :/

Deine Funktion färbt das Bild genau so ein, wie ich es wollte.
Jedoch fehlt dort ja noch die Transparenz an sich.
Diese habe ich dann so nachträglich hinzugefügt:

Java:
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) particleList.get(i).color.getAlpha()/255));
        	g2d.drawImage(colorizeImage(tex,particleList.get(i).color), (int) particleList.get(i).position.x,(int) particleList.get(i).position.y, null);

Aber jetzt funktioniert es so, wie es funktionieren soll.
Nur dass man beim Einfärben+Transparenz schon ganz gut Slowdowns bemerken kann, aber das ist wohl ein anderes Thema.

Danke nochmal!
 

Anhänge

  • 3.jpg
    3.jpg
    60 KB · Aufrufe: 28

Marco13

Top Contributor
Hmja, das Einfärben bei jedem Zeichnen zu machen war auch eigentlich nicht Sinn der Sache... (Selbst die "Brute-force"-Variante, einen Satz von Bildern mit verschiedenen Farben in einer Map oder so zu speichern, wäre in diesem Fall sinnvoller...)
 

conehead

Mitglied
Hmm...da muss ich mir wohl noch was einfallen lassen.
Aber ich möchte alle Farben ja extra nicht vorher speichern müssen.

Es geht ja darum, dass die Farbe weich ändern soll.
Das wären ja tausende von Farben, die ich vorher speichern müsste.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java2d mit GLG2D beschleunigen AWT, Swing, JavaFX & SWT 0
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
X JInternalFrame vor Java2D-Zeichnung langsam bzw. Gui friert ein AWT, Swing, JavaFX & SWT 1
B Java2D - Zeichenreihenfolge AWT, Swing, JavaFX & SWT 3
M Swing + Java2D Sichtfeld bewegen verhält sich träge AWT, Swing, JavaFX & SWT 4
T Java2D and SVG vs PNG AWT, Swing, JavaFX & SWT 12
S Java2D/Graphics2D in Android..? AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Java2D mit Hardware-Unterstützung? AWT, Swing, JavaFX & SWT 5
J Stufenlos vergrösserbare Fonts in Java2D? AWT, Swing, JavaFX & SWT 5
M java2D/jogl interoperability AWT, Swing, JavaFX & SWT 22
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
S Transformationen in Java2D..? AWT, Swing, JavaFX & SWT 4
MrMilti Gezeichnete Java2D Elemente mit Events versehen AWT, Swing, JavaFX & SWT 3
D Zeichen ein Pixel mit Java2D AWT, Swing, JavaFX & SWT 15
L Java2D AWT, Swing, JavaFX & SWT 2
K Java2D auf Knopfdruck weiterzeichnen AWT, Swing, JavaFX & SWT 4
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
B Bild bearbeiten mit Transparenz (spiegeln, Farben austauschen) AWT, Swing, JavaFX & SWT 8
S Images färben und transparenz ändern AWT, Swing, JavaFX & SWT 4
Luk10 Transparenz von ARGB ints AWT, Swing, JavaFX & SWT 5
B Swing Cursor-Transparenz AWT, Swing, JavaFX & SWT 2
C 2D Simulation möglichst effizient (ggf. Transparenz) AWT, Swing, JavaFX & SWT 23
T Überlappende Transparenz und repaint() AWT, Swing, JavaFX & SWT 10
R Transparenz AWT, Swing, JavaFX & SWT 21
O Transparenz mit AWTUtilities aber nur das Fenster nicht die Buttons AWT, Swing, JavaFX & SWT 8
R Transparenz mit AWTUtilities AWT, Swing, JavaFX & SWT 6
J Swing Transparenz bei Swingelementen AWT, Swing, JavaFX & SWT 2
V [SWT] Shell transparenz AWT, Swing, JavaFX & SWT 3
T Pseudo-Transparenz für Applets -> Background grabben AWT, Swing, JavaFX & SWT 15
H Einzelne Pixel auf Transparenz überprüfen? AWT, Swing, JavaFX & SWT 3
D Label und Transparenz . AWT, Swing, JavaFX & SWT 4
T Transparenz mit SWT AWT, Swing, JavaFX & SWT 7
T Transparenz bei Graphics AWT, Swing, JavaFX & SWT 9
P 2 Probleme mit Panel: index setzten und transparenz AWT, Swing, JavaFX & SWT 4
A Transparenz ? AWT, Swing, JavaFX & SWT 13
E transparenz (alpha) - komisches aussehen von textfeldern! AWT, Swing, JavaFX & SWT 2
L Transparenz Problem mit verschiebung AWT, Swing, JavaFX & SWT 8
G png und Transparenz AWT, Swing, JavaFX & SWT 4
F JWindow mit einem Bild und Transparenz AWT, Swing, JavaFX & SWT 4
F Problem mit Transparenz, MouseEvents und Performance AWT, Swing, JavaFX & SWT 3
M Hintergrundbild und grafischer Button (Transparenz Probleme) AWT, Swing, JavaFX & SWT 3
komplettlost Vollbildmodus für MacOs Nutzer geht nicht AWT, Swing, JavaFX & SWT 13
B Swing Menü geht nicht AWT, Swing, JavaFX & SWT 5
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
J import javafx.fxml* bei JavaFX 13 geht nicht mehr AWT, Swing, JavaFX & SWT 7
S PatentComponent geht nicht? AWT, Swing, JavaFX & SWT 3
H automatische Anzahl der Spalten ermitteln -> geht nicht AWT, Swing, JavaFX & SWT 6
B JavaFX Wo liegt mein Gedankenfehler ??? KeyEvent geht nicht ... AWT, Swing, JavaFX & SWT 8
J Warum geht das nicht? if-else usw..... compilieren geht nicht -- HILFE!!! AWT, Swing, JavaFX & SWT 10
LexeB4F setValueAT geht nicht... wieso? AWT, Swing, JavaFX & SWT 14
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
I JavaFX - MP3 geht nicht AWT, Swing, JavaFX & SWT 4
N gewünschte ActionListener bei RadioButton mit isSelected geht nicht AWT, Swing, JavaFX & SWT 2
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
S KeyListener geht nicht AWT, Swing, JavaFX & SWT 12
B JInternalFrame Focus setzten geht nicht AWT, Swing, JavaFX & SWT 2
D Swing fullscreen switch geht nicht richtig AWT, Swing, JavaFX & SWT 8
F Icongröße ändern, geht das ? AWT, Swing, JavaFX & SWT 2
Q Swing MouseListener auf JTable geht nicht AWT, Swing, JavaFX & SWT 2
0 JTable Spaltenbreite automatisch an Inhalt anpassne geht nicht AWT, Swing, JavaFX & SWT 3
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
K Options-Frame integrieren (zum zuschalten und wegschalten wie geht man da ran? AWT, Swing, JavaFX & SWT 7
R JTextField mit abgerundeten Ecken - Geht über Grenze hinaus AWT, Swing, JavaFX & SWT 4
B Java und ansprechende Benutzeroberflächen - geht das? AWT, Swing, JavaFX & SWT 16
V Swing Custom JToggleButton in JTable - Click-Event geht erst beim zweiten Mal AWT, Swing, JavaFX & SWT 7
T transparent geht nicht (btw: rechteck) AWT, Swing, JavaFX & SWT 13
E Null-Layout - Wie geht es ohne? AWT, Swing, JavaFX & SWT 19
Y LookAndFeel Nimbus einschalten geht nicht AWT, Swing, JavaFX & SWT 31
M Bild aus .jar Archiv laden geht nicht AWT, Swing, JavaFX & SWT 6
L Stopp Button geht nicht AWT, Swing, JavaFX & SWT 2
S JDesktopPane bei Button-Klick anzeigen geht nicht AWT, Swing, JavaFX & SWT 5
D JList Scrollbar machen geht nicht AWT, Swing, JavaFX & SWT 4
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
H Sub-Dialog von modalem JDialog aus aufrufen - geht das? AWT, Swing, JavaFX & SWT 6
B Panels stapeln, geht das? AWT, Swing, JavaFX & SWT 7
P SetBounds auf JPanel geht nicht! AWT, Swing, JavaFX & SWT 2
S SWT Composite mit Layout Manager geht nicht AWT, Swing, JavaFX & SWT 4
S JPanel geht über Rand hinaus AWT, Swing, JavaFX & SWT 7
E setAlwaysOnTop geht verloren AWT, Swing, JavaFX & SWT 3
B Swing Variable in JTextfield geht nicht AWT, Swing, JavaFX & SWT 10
B Swing setDefaultButton geht nicht - Komponente fängt Events ab AWT, Swing, JavaFX & SWT 5
M FileFilter geht nicht AWT, Swing, JavaFX & SWT 5
A repaint() geht nicht ? AWT, Swing, JavaFX & SWT 5
D Jlist auf 10 Zeilen begrenzen geht bei mir nicht AWT, Swing, JavaFX & SWT 2
D Runtime.getRuntime.exec() + SWT oder Swing = geht nicht AWT, Swing, JavaFX & SWT 2
M Action.DISPLAYED_MNEMONIC_INDEX_KEY geht nicht mehr AWT, Swing, JavaFX & SWT 2
F JScrollPane setLayout geht nicht AWT, Swing, JavaFX & SWT 2
R MVC: System.out.prinln in View umleiten geht nicht richtig AWT, Swing, JavaFX & SWT 7
B MouseListener / doppelklick geht net AWT, Swing, JavaFX & SWT 16
G JToggleButton pressed geht nicht AWT, Swing, JavaFX & SWT 2
G setLocationRelativeTo(frame) geht plötzlich nicht mehr AWT, Swing, JavaFX & SWT 3
G fireTableDataChanged() geht das auch ohne vector? AWT, Swing, JavaFX & SWT 13
Z Buttons erscheinen erst wenn man mit der Maus drüber geht AWT, Swing, JavaFX & SWT 7
P GridBagLayout einfaches Beispiel geht nicht? AWT, Swing, JavaFX & SWT 5
I Tastur eingabe geht nicht (wenn Button vorhanden) AWT, Swing, JavaFX & SWT 5
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben