旋转图像会导致损坏

时间:2011-05-06 02:44:26

标签: java groovy affinetransform

我正在尝试旋转并向左和向右成像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);
}

原: enter image description here

旋转:enter image description here

2 个答案:

答案 0 :(得分:1)

如果您认为颜色发生了腐败,请取出过滤器。如果我正确理解语法,那就会给你一个负面的形象。

每当我使用变换时,我都会关闭滤镜并手动完成。它确实需要花费很多时间,但它们总是变得更有用。只是一个建议。

答案 1 :(得分:1)

filter()方法需要srcdst 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));