gpt4 book ai didi

java - 如何实现旋转图像算法和缩放图像算法?

转载 作者:行者123 更新时间:2023-12-01 20:53:40 25 4
gpt4 key购买 nike

如何实现旋转图像算法以及图像的放大或缩小?我尝试实现旋转算法,但图像没有显示,我不知道该算法是否可以,请检查旋转算法是否可以,请帮助我显示旋转后的图像并显示缩放后的图像。我想在没有预定义功能的情况下旋转和缩放图像。

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

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

public class Rotation extends JPanel{

public static void main(String []args){
JFrame f = new JFrame();
f.add(new Rotation());
f.setSize(750, 600);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BufferedImage img = null;
try {
img = ImageIO.read(new File("img.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
Rotation r = new Rotation();
r.rotateCw(img, null);
}

public static void rotateCw( BufferedImage img, Graphics g )
{
int width = img.getWidth();
int height = img.getHeight();
BufferedImage newImage = new BufferedImage( height, width, img.getType() );

for( int i=0 ; i < width ; i++ ){
for( int j=0 ; j < height ; j++ ){
newImage.setRGB( height-1-j, i, img.getRGB(i,j) );;
}
}
Graphics2D g2d = (Graphics2D) g;

g2d.drawImage(newImage, 25, 25, null);
}

}

最佳答案

我只是添加另一个答案,以向您展示如何使用您在我的其他答案中询问的旋转代码。我只需更改引用 Picture 类的代码即可使用 BufferedImages。您还必须考虑新图像的大小。

public static void rotateCw( BufferedImage img, Graphics g, double degrees ) {
int width = img.getWidth();
int height = img.getHeight();
BufferedImage newImage = new BufferedImage( width, height, img.getType() );

double angle = Math.toRadians( degrees );
double sin = Math.sin(angle);
double cos = Math.cos(angle);
double x0 = 0.5 * (width - 1); // point to rotate about
double y0 = 0.5 * (height - 1); // center of image

// rotation
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
double a = x - x0;
double b = y - y0;
int xx = (int) (+a * cos - b * sin + x0);
int yy = (int) (+a * sin + b * cos + y0);

if (xx >= 0 && xx < width && yy >= 0 && yy < height) {
newImage.setRGB(x, y, img.getRGB(xx, yy));
}
}
}
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(newImage, 0, 0, null);
}

关于java - 如何实现旋转图像算法和缩放图像算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42778773/

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