【问题标题】:Java rotating an ImageBuffer failsJava 旋转 ImageBuffer 失败
【发布时间】:2012-05-17 22:13:53
【问题描述】:

我尝试旋转一个名为 pic 的 BufferImage 实例,当我尝试此操作时,它会调整图像大小、倾斜和裁剪图像,任何建议使其正常工作

public void rotate(double rads){
    AffineTransform tx = new AffineTransform();
    tx.rotate(rads,pic.getWidth()/2,pic.getHeight()/2);
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
    pic = op.filter(pic, null);
}

当我让它旋转 90˚ 时它工作正常,所以我想知道问题是否在于图像的形状?

【问题讨论】:

  • 你的图片是正方形的吗?如果你将一个矩形旋转 45 度(比如说),那么它需要一个比以前更大的矩形来包含它......
  • 如何让它包含在比图片更大的矩形中?
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing bufferedimage graphics2d


【解决方案1】:

要与AffineTransform 一起使用,您可以使用以下方法对图像进行平方:

private BufferedImage getImage(String name) {
    BufferedImage image;
    try {
        image = ImageIO.read(new File(name));
    } catch (IOException ioe) {
        return errorImage;
    }
    int w = image.getWidth();
    int h = image.getHeight();
    int max = Math.max(w, h);
    max = (int) Math.sqrt(2 * max * max);
    BufferedImage square = new BufferedImage(
            max, max, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = square.createGraphics();
    g2d.setRenderingHint(
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.drawImage(image, (max - w) / 2, (max - h) / 2, null);
    g2d.dispose();
    return square;
}

【讨论】:

  • 我实际上是在尝试使用宽度为长度的 2 倍的矩形图像,有什么建议吗?
  • 上述方法在相同的上下文中使用,AffineTransformOp。它解决了问题吗?如果不是,请编辑您的问题以包含一个sscce,以显示您描述的问题。这个example 说明了使用广泛可用的图像。
猜你喜欢
  • 1970-01-01
  • 2021-02-23
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多