gpt4 book ai didi

java - 如何指定Java BufferedImage调整大小的行为: need min for pixel rows instead of averaging

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:45 25 4
gpt4 key购买 nike

我想调整Java BufferedImage的大小,使其垂直变小,但不使用任何类型的平均,这样,如果源图像中的像素行是“空白”(白色),则目标图像的相应位置将有一个白色像素行:“min”操作。默认算法(在 getScaledInstance 中指定)不允许我进行足够细粒度的控制。我想实现以下逻辑:

for each pixel row in the w-pixels wide destination image, d = pixel[w]
find the corresponding j pixel rows of the source image, s[][] = pixel[j][w]
write the new line of pixels, so that d[i] = min(s[j][i]) over all j, i

我一直在阅读RescaleOp ,但还没有弄清楚如何实现这个功能——这无疑是一种奇怪的缩放类型。任何人都可以指导我如何执行此操作吗?在最糟糕的情况下,我想我可以保留目标 ImageBuffer 并复制伪代码后面的像素,但我想知道是否有更好的方法。

最佳答案

RescaleOp 方法包含一个名为 RenderingHints 的参数。有一个名为 KEY_INTERPOLATION 的提示,用于决定缩放图像时使用的颜色。

如果您使用值 VALUE_INTERPOLATION_NEAREST_NEIGHBOR 作为 KEY_INTERPOLATION,Java 将使用原始颜色,而不是使用某种类型的算法来重新计算新颜色。

因此,您将得到白线,或者根本不会得到任何线条,而不是白线变成灰色或某种颜色的混合。这一切都取决于缩放因子,以及它是偶数行还是奇数行。例如,如果缩放一半,则每 1 像素水平线在新图像中的显示至少会发生 50% 的变化。但是,如果白线的高度为两个像素,则出现白线的可能性为 100%。

这可能是除了编写自己的缩放方法之外最接近的方法。不幸的是,我没有看到任何其他可能有进一步帮助的提示。

要实现您自己的缩放方法,您可以创建一个实现 BufferedImageOp 接口(interface)的新类,并实现 filter() 方法。在 BufferedImage 对象上使用 getRGB()setRGB() 从原始图像中获取像素并在新图像上设置像素。

关于java - 如何指定Java BufferedImage调整大小的行为: need min for pixel rows instead of averaging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com