我想将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);
我使用以下代码进行旋转解决了
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;
感谢您向我建议正确的职位!