Graphics2D: Transparent übereinander zeichnen

S

stef1981

Gast
Hallo,

ich möchte mittels Graphics2d zwei Rechtecke unterschiedlicher Farbe transparent zeichnen. Die beiden Rechtecke überschneiden sich teilweise. Die Fläche an der sich beide überlappen soll aber nur in der Farbe des OBERSTEN ( zuletzt gezeichneten ) Rechtecks transparent gezeichnet werden und nicht mit der darunter liegenden "vermischt" werden. Ist das möglich und wenn ja wie?

Danke und Viele Grüße,

Stef
 

hdi

Top Contributor
1. Vor dem Zeichnen das Schnittrechteck ermitteln
2. Anhand dieser Information ein 6-Eck für das untere Rechteck ableiten (new Polygon(...)), bei dem eben die Ecke wo sie sich schneiden fehlt
3. Das obere Rechteckt und das 6-Eck zeichnen (g.fillPolygon(...))

Sieht natürlich strange aus, wenn der Hintergrund auf dem du zeichnest, nicht einfarbig oder selbst nicht transparent ist.
 
Zuletzt bearbeitet:
S

stef1981

Gast
Wenn es irgendwie mit einem AlphaComposite funktionieren würde, wäre das natürlich am besten, da ich auch beliebige Polygone übereinander zeichnen will.
 

Michael...

Top Contributor
Ist das überlagernde Rechteck komplett Transparent oder soll nur der Bereich der Überlagerung transparent sein.
Ersteres ginge einfach mit einer Composite vom Typ
Code:
AlphaComposite.SRC
. Für letzteres müsste man eventuell etwas tricksen.
 
S

stef1981

Gast
Ich zeige ein Bild an und zeichne darauf transparente gefüllte geometrische Strukturen. An der Fläche, an der sich zwei Strukturen überlagern soll NUR die Farbe der "obersten" Struktur transparent angezeigt werden, so dass man das darunterliegende Bild erkennt. Die Farbe soll nicht mit der darunterliegenden transparenten Struktur "vermischt" werden.
 

Michael...

Top Contributor
Ich habe mal ein bestehendes Bsp. modifiziert, um die Auswirkung von AlphaComposite.SRC zu demonstieren. Die "transparenten Strukturen" müssen dabei zunächst auf ein transparentes BufferedImage gezeichnet werden:
Java:
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AlphaCompositeSrcDemo extends JFrame {
	private Image demoImage;
	private Image transparentObjectImage;

	public AlphaCompositeSrcDemo() {
		demoImage = AlphaCompositeSrcDemo.createSimpleImage(100, 100);
		transparentObjectImage = createTransparentObjectImage(false);
		final JPanel panel = new JPanel() {
			public void paintComponent(Graphics g) {
				super.paintComponent(g);
				Graphics2D g2 = (Graphics2D)g.create();
				g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
				
				g2.drawImage(demoImage, 30, 30, null);
				g2.drawImage(transparentObjectImage, 50, 50, null);
				g2.dispose();
			}
		};

		final JCheckBox check = new JCheckBox("aktivier Top Objekt");

		this.getContentPane().add(panel, BorderLayout.CENTER);
		this.getContentPane().add(check, BorderLayout.SOUTH);
		check.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				transparentObjectImage = createTransparentObjectImage(check.isSelected());
				panel.repaint();
			}
		});
	}

	private BufferedImage createTransparentObjectImage(boolean round) {
		BufferedImage newImage = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g = newImage.createGraphics();
		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(new Color(0, 255, 0, 220));
		g.fillRect(0, 0, 100, 100);
		if (round) {
			g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
			g.setColor(new Color(255, 0, 0, 20));
			g.fillRect(20, 20, 100, 100);
		}
		g.dispose();
		return newImage;
	}

	public static BufferedImage createSimpleImage(int w, int h) {
		BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
		Graphics2D g = image.createGraphics();
		g.setColor(Color.BLUE);
		g.fillRect(0, 0, w, h);
		g.setColor(Color.YELLOW);
		g.setStroke(new BasicStroke(10));
		g.drawLine(0, 0, w, h);
		g.drawLine(w, 0, 0, h);
		g.dispose();
		return image;
	}

	public static void main(String[] args) {
		JFrame frame = new AlphaCompositeSrcDemo();
		frame.setBounds(0, 0, 200, 250);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
L Graphics2d zoomen AWT, Swing, JavaFX & SWT 3
L AWT graphics2d transform AWT, Swing, JavaFX & SWT 7
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
Soloeco Graphics2D - Verbinden zweier Punkte AWT, Swing, JavaFX & SWT 6
B Graphics -> Graphics2D etwas zu beachten? AWT, Swing, JavaFX & SWT 8
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
B Graphics2D Componente Drehen AWT, Swing, JavaFX & SWT 2
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
M JPanel und Graphics2D AWT, Swing, JavaFX & SWT 2
S Java2D/Graphics2D in Android..? AWT, Swing, JavaFX & SWT 2
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
S Graphics2D - setClip() AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Graphics2D object in ein anderes Zeichnen AWT, Swing, JavaFX & SWT 7
S AWT Pong - Probleme mit übergreifenden Objekten && Graphics2D AWT, Swing, JavaFX & SWT 3
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
N AWT Graphics2D mehrmals aufrufen AWT, Swing, JavaFX & SWT 5
Developer_X Swing Graphics2D.zoom, wie rückgängig machen? AWT, Swing, JavaFX & SWT 6
Developer_X Swing Graphics2D translate zerstört performance AWT, Swing, JavaFX & SWT 2
N graphics2d auf panel AWT, Swing, JavaFX & SWT 2
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
A Swing LAF unter Windows: javax.swing.DebugGraphics cannot be cast to java.awt.Graphics2D AWT, Swing, JavaFX & SWT 5
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
cowabunga1984 Implementierung von Graphics2D AWT, Swing, JavaFX & SWT 2
C Graphics2D, Text abschneiden AWT, Swing, JavaFX & SWT 2
N Graphics2D mit unterschiedlichen Grauwerten befüllen AWT, Swing, JavaFX & SWT 3
F Graphics2D scale und Positionierung einer TextArea AWT, Swing, JavaFX & SWT 8
F JPanel: Graphics2D, scale und Mauskoordinaten AWT, Swing, JavaFX & SWT 4
P paintComponent /paint/ update/ offscreenImage / Graphics2D / AWT, Swing, JavaFX & SWT 4
M Graphics2D - abstract void draw(.) AWT, Swing, JavaFX & SWT 2
redztripe Graphics2D rotieren und rotiertes Bild abspeichern AWT, Swing, JavaFX & SWT 2
R AffinrTransform + Graphics2D verschieben AWT, Swing, JavaFX & SWT 3
R Graphics2D + Bild anzeigen. AWT, Swing, JavaFX & SWT 25
M Probleme mit Graphics2D AWT, Swing, JavaFX & SWT 7
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
T Rectangle Transparent und darunter liegende Objekte Bedienbar AWT, Swing, JavaFX & SWT 0
B Dropdown "Einstellungen" auf JPanel, transparent AWT, Swing, JavaFX & SWT 1
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
T Jframe Transparent machen AWT, Swing, JavaFX & SWT 3
N Swing Frame ungewollt transparent! AWT, Swing, JavaFX & SWT 2
T transparent geht nicht (btw: rechteck) AWT, Swing, JavaFX & SWT 13
C Swing Button color transparent AWT, Swing, JavaFX & SWT 4
eLogic png transparent auf Desktop Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JCheckbox transparent machen AWT, Swing, JavaFX & SWT 7
B RootPane bzw CardLayout Transparent machen AWT, Swing, JavaFX & SWT 7
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
M Wie kann man 2 JPanel aufeinander transparent legen? AWT, Swing, JavaFX & SWT 4
lumo SWT Canvas transparent AWT, Swing, JavaFX & SWT 4
I 2 Panels übereinander, 1 transparent AWT, Swing, JavaFX & SWT 2
S JFrame transparent? AWT, Swing, JavaFX & SWT 8
martin82 Swing JTable - selectionBackground transparent AWT, Swing, JavaFX & SWT 7
N GridBagLayout, leere grids (Hintergrund) transparent? AWT, Swing, JavaFX & SWT 3
SuperSeppel13 Komponente transparent übermalen AWT, Swing, JavaFX & SWT 2
R Swing Warum wird der Inhalt auch Transparent? AWT, Swing, JavaFX & SWT 8
Guybrush Threepwood JRadioButton transparent AWT, Swing, JavaFX & SWT 2
K JProgressBar transparent AWT, Swing, JavaFX & SWT 10
R JPanel Transparent AWT, Swing, JavaFX & SWT 3
Kr0e Png transparent AWT, Swing, JavaFX & SWT 1
G JTabbedPane transparent AWT, Swing, JavaFX & SWT 2
K Swing: ContentPane von JDialog ist transparent (Fehler) AWT, Swing, JavaFX & SWT 10
T nach resize transparent weg AWT, Swing, JavaFX & SWT 4
G JComboBox und JTable transparent AWT, Swing, JavaFX & SWT 18
G JButton transparent AWT, Swing, JavaFX & SWT 3
M Hintergrund Transparent machen? AWT, Swing, JavaFX & SWT 3
S Button transparent machen AWT, Swing, JavaFX & SWT 8
G schwarzen hintergrund von png transparent machen AWT, Swing, JavaFX & SWT 2
B JFrame Transparent darstellen AWT, Swing, JavaFX & SWT 4
S transparent + bewegen AWT, Swing, JavaFX & SWT 3
F Transparent bzw. transfluent(durscheinend) drucken? AWT, Swing, JavaFX & SWT 2
F Checkbox transparent machen ? AWT, Swing, JavaFX & SWT 2
S JTextArea background Transparent geht nicht AWT, Swing, JavaFX & SWT 23
L JScrollPane Transparent machen AWT, Swing, JavaFX & SWT 4
G hintergrund von JFrame/Container transparent machen AWT, Swing, JavaFX & SWT 2
D JWindow => transparent ? AWT, Swing, JavaFX & SWT 2
T BufferedImage Farbe "Transparent" AWT, Swing, JavaFX & SWT 21
lin Bild laden und transparent machen AWT, Swing, JavaFX & SWT 3
T JPanel Transparent machen AWT, Swing, JavaFX & SWT 5
J Rahmen vom Bild transparent machen AWT, Swing, JavaFX & SWT 4
CptK JPanels übereinander legen AWT, Swing, JavaFX & SWT 6
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
M Java FX Layouts übereinander statt nebeneinander AWT, Swing, JavaFX & SWT 4
S Swing Mehrere Modal-Dialoge übereinander AWT, Swing, JavaFX & SWT 5
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
F Swing JPanels übereinander ohne Mananger AWT, Swing, JavaFX & SWT 1
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
T Prüfen ob 2 JLabel übereinander liegen. Performance Problem. AWT, Swing, JavaFX & SWT 5
S 2 Canvas übereinander AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben