0

我正在尝试将图像左右旋转 90 度。

但是由于某种原因,此过程的输出会导致损坏。

这是我的代码:(
它很时髦,但假装它的 java 并不需要太多想象力)

void rotate(File file){
    def image = ImageIO.read(file);
    double theta  = Math.PI / 2;
    def w = image.width / 2;
    def h = image.height / 2;

    def transform = new AffineTransform();
    transform.rotate(theta, h, w);
    def op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
    image = op.filter(image, null);

    def name = file.getName();
    def type = name.substring(name.lastIndexOf(".") + 1, name.length());
    ImageIO.write(image,type,file);
}

原来的: 在此处输入图像描述

旋转:在此处输入图像描述

4

2 回答 2

1

如果您指的是颜色变化,请取出过滤器。如果我正确理解语法,那会给你一个负面形象。

每当我使用变换时,我都会关闭过滤器并手动进行。这确实需要很多时间,但事实证明它们总是更有用。只是一个建议。

于 2011-05-06T02:51:45.467 回答
1

filter()方法需要一个srcand dst BufferedImage,它必须是不同的。

Image image = null;
try {
    image = ImageIO.read(new File("gZtC3.jpg"));
} catch (IOException ex) {
    ex.printStackTrace(System.err);
}
double theta = Math.PI / 2;
int w = image.getWidth(null);
int h = image.getHeight(null);
AffineTransform at = AffineTransform.getRotateInstance(theta, w / 2, h / 2);
BufferedImage src = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = src.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
AffineTransformOp op = new AffineTransformOp(at, AffineTransformOp.TYPE_BICUBIC);
BufferedImage dst = op.filter(src, null);
this.add(new JLabel(new ImageIcon(dst), JLabel.CENTER));
于 2011-05-06T04:46:26.047 回答