Ich mache gerade ein Spiel, das das Drehen eines Bildes erfordert. Um es zu drehen, verwende ich den folgenden Code.Ersetzen Sie nur die Ecken eines gedrehten Bildes durch eine andere Farbe
public ManipulableImage rotate(double degrees){
BufferedImage rotatedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g = rotatedImage.createGraphics();
g.rotate(Math.toRadians(degrees), image.getWidth()/2, image.getHeight()/2);
/*
ManipulableImage is a custom class that makes it easier to manipulate
an image code wise.
*/
g.drawImage(image, 0, 0, null);
return new ManipulableImage(rotatedImage, true).replace(0, -1);
}
Der Code dreht das Bild, aber es lässt die Ecken schwarz, die transparent sein sollten. Mein Renderer erkennt den rgb-Wert -1 als den transparenten Wert und ändert kein Pixel, wenn dieser Wert vorhanden ist. Also möchte ich die RGB-Werte der Ecken von 0 (schwarz) zu -1 (transparent) ändern.
Das einzige Problem ist, ich kann nicht einfach durch das Bild iterieren und die schwarzen Pixel ersetzen, weil es andere Pixel im Originalbild gibt, die schwarz sind. Meine Frage ist also, wie ich nur die schwarzen Pixel ersetze, die durch die Rotation entstehen.
(. Leider konnte ich keine Beispiele für das Bild zur Verfügung stellen, ich bin nicht sicher, wie mit diesem Computer Screenshot)
Sie können versuchen, einen Algorithmus zu machen, dass sucht, gibt einen Punkt, alle Nachbarn mit der gleichen Farbe, und dann diese Nachbarn iterieren. Da die Ecken schwarz sind, sollten Sie, wenn Sie die Iteration in den vier Ecken beginnen, alle 4 schwarzen Bereiche erhalten. – ebeneditos
Das ist auch nicht perfekt, da es an den Bildrändern schwarze Pixel geben könnte. –
Rechts, sind die Ecken des gedrehten Originalbildes an den Rändern des neuen Bildes? – ebeneditos