【问题标题】:Rotate a buffered image with white background [duplicate]旋转具有白色背景的缓冲图像[重复]
【发布时间】:2020-03-12 16:08:42
【问题描述】:

我想将BufferedImage 旋转一个弧度角。我使用了以下代码。 matrixImage 是一个整数矩阵,其中前景像素以 1 作为值,而背景像素以 0 作为值。新的BufferedImage 已正确旋转,但多余的边框是黑色的。新图像比原来的大,新的部分是黑色的。我希望新图像的所有背景像素都是白色的。我尝试了Rotate BufferedImage and remove black bound 提出的解决方案,但我注意到在旋转过程中图像会发生变化。

bufferedImage = matrix2BufferedImage(matrixImage);
AffineTransform transform = new AffineTransform();
transform.rotate(radians, bufferedImage.getWidth() / 2, bufferedImage.getHeight() / 2);
AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
bufferedImage = op.filter(bufferedImage, null);

【问题讨论】:

标签: java bufferedimage affinetransform


【解决方案1】:

我使用以下代码解决了旋转

    private BufferedImage rotateImage(BufferedImage sourceImage, double angle) {
    AffineTransform transform = new AffineTransform();
    transform.rotate(angle, sourceImage.getWidth() / 2, sourceImage.getHeight() / 2);
    AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR);
    BufferedImage destImage = op.filter(sourceImage, null);

    Graphics2D g2d = destImage.createGraphics();

    g2d.drawRenderedImage(sourceImage, transform);

    g2d.dispose();
    return destImage;
}

然后,我使用以下代码对缓冲图像进行二值化

            int value=binarized.getRGB(x,y);
            if(value==0)
                value=-1;
            output[y][x] = ((0xFFFFFF & value) == 0xFFFFFF) ? (byte) 0 : 1;

感谢您向我推荐正确的帖子!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2018-12-03
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多