Java 旋转 ImageBuffer 失败

标签 java swing bufferedimage graphics2d

我正在尝试旋转名为 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° 时,它工作正常,所以我想知道问题是否在于图像的形状?

最佳答案

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;
}

关于Java 旋转 ImageBuffer 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10644231/

相关文章:

c# - 用于桌面应用程序的 Java Swing 或 Windows 窗体?

Java Bufferedimage setRgb getRgb,2个不同的结果

java - java.awt 的 Android 替代品(BufferedImage 和 Raster)

java - 用于反向一对一解决方法的 Hibernate 延迟加载 - 这是如何工作的?

java - 如何判断图像是否包含 "handwritten signature"?

java - Apache Spark 和 Spring Boot 的依赖冲突

java - 创建带有圆角的表格

java - 编辑 JTable 单元格,作为 JTree 节点

java - 当输入金额和土耳其里拉 "TL"图标丢失时,JFormattedTextField 不设置值

java - BufferedImage 有两种类似的方法,一种有效,一种无效。为什么?