Java AWT: Abgerundetes Bild mit glatten Kanten zeichnen
Posted: 17 Jan 2025, 08:28
Ich mache ein Spiel und würde gerne abgerundete Bilder rendern, aber jede Lösung, die ich ausprobiert habe, zeichnet entweder hässliche und gezackte Ecken oder verlangsamt meine Spielschleife erheblich. Ich würde gerne eine Lösung finden, die sowohl glatte Kurven zeichnet als auch keinen großen Einfluss auf die Leistung meines Spiels hat. Ich habe eine Rendering-Schleife, die jeden Frame ausführt, wobei der Renderer jedes meiner Objekte durchgeht und ihre jeweilige Render-Methode aufruft:
So sieht die UIImage-Rendermethode aus:
Jede Hilfe ist willkommen!
Code: Select all
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for (UIImage child : children) {
child.render(g2);
}
}
Code: Select all
public void render(Graphics2D g) {
int radius = 30;
int w = (int) size.X;
int h = (int) size.Y;
int x = (int) pos.X;
int y = (int) pos.Y;
//This way looks good, but creates a lot of lag:
Shape clipShape = new RoundRectangle2D.Double(x, y, w, h, 20, 20);
g.setComposite(AlphaComposite.Clear);
g.fillRect(x, y, w, h);
g.setComposite(AlphaComposite.SrcOver);
g.setPaint(new TexturePaint(image, new Rectangle2D.Float(x, y, w, h)));
g.fill(clipShape);
//This way doesn't have an impact on performance, but looks ugly;
Shape rounded = new RoundRectangle2D.Double(x, y, w, h, radius, radius);
g.setClip(rounded);
g.drawImage(image, x, y, w, h, null);
g.setClip(null);
}