Java 旋转图像会导致损坏

Java 旋转图像会导致损坏,java,groovy,affinetransform,Java,Groovy,Affinetransform,我试着将图像左右旋转90度 但出于某种原因,此过程的输出会导致腐败 这是我的代码: (它是groovy,但它不需要太多的想象力来伪装它的java) 原件: 旋转:如果您指的是颜色变化,请取出过滤器。如果我正确理解了语法,这会给你一个负面印象 每当我使用转换时,我都会关闭过滤器,并手动进行转换。这确实需要很多时间,但它们总是更有用。只是一个建议。该方法需要一个src和dstBufferedImage,两者必须不同 Image image = null; try { image = Ima

我试着将图像左右旋转90度

但出于某种原因,此过程的输出会导致腐败

这是我的代码:
(它是groovy,但它不需要太多的想象力来伪装它的java)

原件:


旋转:

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

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

该方法需要一个
src
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));

谢谢你的代码,但这实际上也有同样的问题,同样在你的例子中,你仍然将null作为第二个参数传递给filter,这就是我所做的。这似乎创建了另一个包含原始内容的BuffereImage,并写入其中。您的源尚未渲染,因此它已旋转但为空。使用
filter()
很适合链接,但您接受的方法是正确的。比较一下。我真的不知道我在这里做什么,但是放下过滤器,做
g.drawImage(origImg,transorm,null)将正确的内容引入g@mkyorak应用过滤器的方式基本上是采用像素的颜色,然后将这些值乘以相同的像素颜色(这是默认值吗?)。这样做会产生“负面”形象。例如,叶子最暗的部分变成了浅蓝色。
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));