1 2 3 4 | import java.awt.image.BufferedImage; import java.awt.Graphics2D; import java.awt.Color; import java.awt.geom.AffineTransform; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public static BufferedImage rotate(BufferedImage source, double degrees, int x, int y, Color color, boolean resizable){ double radians = Math.toRadians((degrees % 360.0 + 360.0 ) % 360.0 ); int width = source.getWidth(); int height = source.getHeight(); double rx = x; double ry = y; int cx = 0 ; int cy = 0 ; if (resizable){ double dwidth = Math.abs(source.getWidth() * Math.cos(radians)) + Math.abs(source.getHeight() * Math.sin(radians)); double dheight = Math.abs(source.getWidth() * Math.sin(radians)) + Math.abs(source.getHeight() * Math.cos(radians)); width = ( int )Math.round(dwidth); height = ( int )Math.round(dheight); rx = dwidth / 2 ; ry = dheight / 2 ; cx = ( int )Math.round((dwidth - source.getWidth()) / 2 ); cy = ( int )Math.round((dheight - source.getHeight()) / 2 ); } BufferedImage out = new BufferedImage(width, height, source.getType()); Graphics2D g2d = out.createGraphics(); AffineTransform at = (AffineTransform) (g2d.getTransform().clone()); at.rotate(radians, rx, ry); g2d.setTransform(at); g2d.drawImage(source, cx, cy, color, null ); g2d.dispose(); return out; } public static BufferedImage rotate(BufferedImage source, double degrees){ return rotate(source, degrees, - 1 , - 1 , Color.WHITE, true ); } |
修改前
before

以 rotate(source, 45.0, 0, 0, Color.RED, false) 修改後
edit with rotate(source, 45.0, 0, 0, Color.RED, false)

以 rotate(source, -45.0) 修改後
edit width rotate(source, -45.0)

沒有留言 :
張貼留言