rotate VolatileImage

eliteSchaf

Mitglied
Hey Leute!

Ich hab hier ein kleines Problem.

Ich hab ein VolatileImage, welches einen Sprite enthält und rundherum ist das Bild transparent.
Jetzt will ich ich das ganze Bild einfach drehen, jedoch sind danach
die Ecken des Bildes nicht mehr transparent, odern weiß.

Hat da jemand ne Idee?
Oder soll ich das Ganze in ein BufferedImage umwandeln, drehen und dann wieder in ein VolatileImage reinschreiben?


Mfg,
eliteSchaf
 

AngryDeveloper

Bekanntes Mitglied
Der Zeichencode wäre nicht schlecht.

Kann sein, dass du mit setBackground und clearRect den Hintergrund noch neu zeichnen musst um die Ecken transparent zu bekommen.
 

eliteSchaf

Mitglied
Also der Code zum Zeichnen funktioniert richtig. Wenn ich das Bild nicht drehe, sprich die erste If-Bedingung true ist, dann wird es richtig dargestellt.

Code:
public static VolatileImage rotateImage(VolatileImage img, double angleRadiants) {
		
		//If we don't need to rotate it, just return the image
		if(angleRadiants == Math.toRadians(0)) {
			return img;
		}
		GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
		VolatileImage tmp = gc.createCompatibleVolatileImage(img.getWidth(null), img.getHeight(null), Transparency.BITMASK);
		Graphics2D g = tmp.createGraphics();
		
		g.setComposite(AlphaComposite.Src);
		g.setColor(Color.black);
		g.clearRect(0, 0, tmp.getWidth(), tmp.getHeight());
		
		AffineTransform rotateTransform = new AffineTransform();
		rotateTransform.rotate(angleRadiants, img.getWidth() / 2, img.getHeight() / 2);
		g.setTransform(rotateTransform);
		
		g.setComposite(AlphaComposite.Src);
		g.setColor(Color.black);
		g.clearRect(0, 0, tmp.getWidth(), tmp.getHeight());
		
		g.drawImage(img, 0, 0, img.getWidth(), img.getHeight(), null);
		
		g.dispose();
		
		return tmp;
}
 

AngryDeveloper

Bekanntes Mitglied
VolatileImage kann doch Transparenz? (seit 1.5 denke ich)
Java:Tutorials:VolatileImage - GPWiki

Edit:
clearRect() nutzt allerdings eben die Background Color und nicht die über setColor gesetzte Farbe.
Aus der API:
Clears the specified rectangle by filling it with the background color of the current drawing surface. This operation does not use the current paint mode.
Beginning with Java 1.1, the background color of offscreen images may be system dependent. Applications should use setColor followed by fillRect to ensure that an offscreen image is cleared to a specific color.
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben