java - 无法将 2 个图像并排渲染到正在更改的原始图像

标签 java image graphics awt

我正在尝试创建一个程序,该程序可以打开两个具有相同尺寸的 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 种恒定颜色。然而,总和图像在新边界周围有一些原始图像中没有的伪影。这是我正在谈论的内容的放大屏幕截图: enter image description here

如果我将源图像缩放到相同级别,我不会在边缘看到相同的伪像。我希望它的边缘只是黄色,然后是红色。不应该有不同深浅的黄色和红色。是否有一些配置可以使其以这种方式运行,或者使用不同的渲染方法?
另外,我通常不使用图形,这种边缘融合有什么名称吗?感谢您的帮助!

最佳答案

你的代码没问题

并且您的图像没有缩放也可以并且没有伪影

你做的“缩放”级别的唯一问题

当你进行缩放时,你将需要获得原始图像中不存在的额外像素

这个像素是通过算法计算出来的,这个算法使用两种颜色(红色和黄色像素)之间边缘周围的相邻像素来计算缩放图像中的新像素


看这张图片:它对特定部分进行了缩放,你可以看到像正方形,但在原始图像中你可以看到这是一个小像素

enter image description here


注意:这就是为什么当你购买相机时你需要询问它的分辨率,因为当分辨率增加时,即使你将变焦放大到这个级别,图像质量也会提高。


我使用了您的代码,这是输出:

1- enter image description here

这是没有任何缩放且没有伪影的两个图像

2- enter image description here

这是放大后的两张图,在这里我可以看到伪影

关于java - 无法将 2 个图像并排渲染到正在更改的原始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15990748/

相关文章:

java - 为什么我的弹力球程序在第 5 次弹跳后没有停止?

r - 如何使用 r 将 tiff 图像转换为 jpeg

jquery - 使用 jQuery,如何更改 div 内悬停时的图像?

python - 在 Python 中压缩图像(无存档)

Java 用特定字体写入文本图像

Java 图形不显示

java - 针对 WatchEvent 证明存在的文件获取 FileNotFoundException

Java 抛出自定义错误

java - jackson 强制归零

Java 项目改变行为