我正在尝试创建一个程序,该程序可以打开两个具有相同尺寸的 jpeg,并创建一个新的 jpeg,其中两个图像并排放置,而枯萎图像没有变化。
创建新图像的代码是这样的:
public static Picture sumPicturesHorizontally(Picture left, Picture right) {
BufferedImage newImage = new BufferedImage(
left.getWidth() + right.getWidth(),
left.getHeight(),
left.getImage().getType());
Graphics2D g = (Graphics2D) newImage.getGraphics();
g.drawImage(left.getImage(), 0, 0, null);
g.drawImage(right.getImage(), left.getWidth(), 0, null);
Picture p = new Picture(newImage);
return p;
}
(图片只是我的一个包装类,其中包含一个 BufferedImage 和该图像的尺寸)
在大多数情况下,这是可行的。然而,输出的图像不仅仅是并排的左右图像,似乎有什么东西正在修改左右图像之间的边界。
我有一个黄色方 block 和一个红色方 block ;我的源图像是 1 种恒定颜色。然而,总和图像在新边界周围有一些原始图像中没有的伪影。这是我正在谈论的内容的放大屏幕截图:
如果我将源图像缩放到相同级别,我不会在边缘看到相同的伪像。我希望它的边缘只是黄色,然后是红色。不应该有不同深浅的黄色和红色。是否有一些配置可以使其以这种方式运行,或者使用不同的渲染方法?
另外,我通常不使用图形,这种边缘融合有什么名称吗?感谢您的帮助!
最佳答案
你的代码没问题
并且您的图像没有缩放也可以并且没有伪影
你做的“缩放”级别的唯一问题
当你进行缩放时,你将需要获得原始图像中不存在的额外像素
这个像素是通过算法计算出来的,这个算法使用两种颜色(红色和黄色像素)之间边缘周围的相邻像素来计算缩放图像中的新像素
看这张图片:它对特定部分进行了缩放,你可以看到像正方形,但在原始图像中你可以看到这是一个小像素
注意:这就是为什么当你购买相机时你需要询问它的分辨率,因为当分辨率增加时,即使你将变焦放大到这个级别,图像质量也会提高。
我使用了您的代码,这是输出:
1-
这是没有任何缩放且没有伪影的两个图像
2-
这是放大后的两张图,在这里我可以看到伪影
关于java - 无法将 2 个图像并排渲染到正在更改的原始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15990748/