java - 旋转具有白色背景的缓冲图像
问题描述
我想以BufferedImage
弧度为单位旋转一个角度。我使用了以下代码。matrixImage
是一个整数矩阵,其中前景像素1
作为值,而背景像素0
作为值。新BufferedImage
的已正确旋转,但额外的边框是黑色的。新图像比原来的大,新的部分是黑色的。我希望新图像的所有背景像素都是白色的。我尝试了Rotate BufferedImage 提出的解决方案并删除了黑色边界,但我注意到在旋转过程中图像会发生变化。
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;
感谢您为我推荐正确的帖子!
推荐阅读
- ios - 无法推断通用参数“D”。[订购错误]
- java - 从 Google Play 下载时应用程序崩溃,但在本地运行
- python - 计算机启动时启动 python 文件
- wpf - 如何使左双击在整个 treeviewitem 区域上工作而不仅仅是在文本上?
- excel - ActiveX 文本框,搜索输入的值
- angularjs - $watch 如何从组件的控制器更改服务中的变量?
- php - 同一个 fetch_assoc 中的两个查询,如何?
- c# - 简化迭代到 linq 查询
- python - python for循环赋值变量
- c++ - 如何在 libVLC 中拍摄快照而不显示媒体播放器