gpt4 book ai didi

java - 在 Java 中旋转 BufferedImage

转载 作者:行者123 更新时间:2023-12-02 09:03:36 29 4
gpt4 key购买 nike

我一直在尝试使用 for 循环旋转图像。我的代码确实有效,但这种方法似乎没有必要,并且图像在旋转时会丢失像素。有没有更简单的方法来做到这一点?

//rotates image around center a degrees
public void drawRotatedImage(Graphics g, BufferedImage image, double a, int x, int y, int pixelSize) {
//origin point for rotation
int rX = image.getWidth() / 2;
int rY = image.getHeight() / 2;

for(int x1 = 0; x1 < image.getWidth(); x1++) {
for(int y1 = 0; y1 < image.getHeight(); y1++) {
int c = image.getRGB(x1, y1);
//rotating point
int nX = (int) (((x1-rX) * Math.cos(a)) - ((y1-rY) * Math.sin(a)));
int nY = (int) (((x1-rX) * Math.sin(a)) + ((y1-rY) * Math.cos(a)));
g.setColor(new Color(c));
//drawing each pixel
g.fillRect((nX*pixelSize) + x, (nY*pixelSize) + y, pixelSize, pixelSize);
}
}
}

最佳答案

我创建了一个简单的示例程序(改编自 Rotating BufferedImage instances )

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class Main {
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("Test");

frame.add(new JComponent() {

BufferedImage image = ImageIO.read(new URL(
"https://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/%D0%9D%D0%B5%D1%80%D0%BF%D0%B8%D1%87%D0%B8%D0%B9_%D0%B2%D0%B7%D0%B3%D0%BB%D1%8F%D0%B4.jpg/500px-%D0%9D%D0%B5%D1%80%D0%BF%D0%B8%D1%87%D0%B8%D0%B9_%D0%B2%D0%B7%D0%B3%D0%BB%D1%8F%D0%B4.jpg"));

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

AffineTransform at = new AffineTransform();
at.translate(getWidth() / 2, getHeight() / 2); // draw image in center of frame
// at.scale(0.5, 0.5);
at.rotate(Math.toRadians(180));
at.translate(-image.getWidth() / 2, -image.getHeight() / 2); // rotate around the center

Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(image, at, null);

}
});

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 800);
frame.setVisible(true);
}
}

关于java - 在 Java 中旋转 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993487/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com