gpt4 book ai didi

java - 调整高 BufferedImage 大小时如何保持/偏爱某些像素值?

转载 作者:行者123 更新时间:2023-11-30 09:54:25 24 4
gpt4 key购买 nike

我有一个 BufferedImage,它很高(大约 1100 像素高)但不是特别宽(大概 200-300 像素)。该图像由一个数据图组成,但大多数像素代表的背景颜色/值并不是很有趣。我的问题是,当图像从 1100 像素的高度调整为 200-300 像素时,许多实际包含有趣数据的像素被背景颜色像素破坏了。有什么方法可以告诉 Java 2D 重新缩放算法我更喜欢某些值的像素(或者更好的是,我想在重新缩放时降低背景颜色的优先级)?我使用以下代码片段重新缩放图像:

BufferedImage resized = new BufferedImage(width, height, imageType);
Graphics2D graphics2D = resized.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); //Has worked best in my case
graphics2D.drawImage(source, 0, 0, width, height, null);
graphics2D.dispose();

我确信在 Java 中有更有效的调整图像大小的方法,但这并不有趣(至少现在不是)。

有点无聊的是,我以前用过一个库(以后不会再用了),它实际上设法保留了很多代表像素的有值(value)数据。

请注意,如果有任何帮助的话,我手头有原始像素数据(一个 2D int 数组)。该应用程序将处理许多不同大小的图像,因此我不确定高度是否一定是 1100 像素。

谢谢。

最佳答案

您是否尝试过在渲染提示中打开抗锯齿?这可能会有所帮助。

如果没有,您可以很容易地编写自己的缩放函数。这实际上非常简单 - 您只需要:

  • 遍历目标 BufferedImage 中的所有点
  • 对于这些中的每一个,循环遍历原始像素数据中的相关点(这将是一个由缩放因子决定的矩形区域)
  • 根据原始像素值使用您选择的公式计算目标颜色
  • 使用BufferedImage.setRGB(...) 设置目标像素的颜色

正常的抗锯齿会使用源像素值的平均值作为公式,这听起来像是您想要优先考虑特定值的东西(例如,如果背景像素的颜色值较低,则采用最大像素值)

关于java - 调整高 BufferedImage 大小时如何保持/偏爱某些像素值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3308676/

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