【问题标题】:How to copy a rotated square BufferedImage part using Java?如何使用 Java 复制旋转的方形 BufferedImage 部分?
【发布时间】:2016-12-12 14:56:48
【问题描述】:

我想复制BufferedImage的一部分,但是复制的形式不是简单的正方形,而是旋转了某个角度的正方形。作为输出,我希望获得宽度和高度等于复制正方形大小和初始图像内容的 BufferedImage,其中复制正方形与初始图像相交。

最简单的方法是什么?

【问题讨论】:

  • (我不是反对者。我认为这个问题是合理的。但是可以通过一些细节来改进它。特别是:)如何给出“旋转正方形”?它是以中心+角度+大小的形式给出的,还是不同的?
  • 不管它是如何给出的,因为所有的方法都是可转换的。考虑你喜欢的中心+角度+大小。

标签: java awt java-2d


【解决方案1】:

一个简单的方法是创建一个具有所需大小的新图像,根据选定的正方形区域转换该图像的Graphics2D,然后简单地将原始图像绘制成这个图形:

private static BufferedImage extractRegion(
    BufferedImage source, Point2D center, Point2D size, double angleRad)
{
    int w = (int)size.getX();
    int h = (int)size.getY();
    BufferedImage result = 
        new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = result.createGraphics();
    g.setRenderingHint(
        RenderingHints.KEY_INTERPOLATION, 
        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.translate(size.getX() / 2, size.getY() / 2);
    g.rotate(angleRad);
    g.translate(-center.getX(), -center.getY());
    g.drawImage(source, 0, 0, null);
    g.dispose();
    return result;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2011-08-15
    • 2019-11-16
    • 2020-11-01
    • 1970-01-01
    • 2013-03-07
    相关资源
    最近更新 更多