我有一个非常高的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中调整图像大小的方法更有效,但这并不重要(至少目前不是这样)。
一种无聊的事情是我之前使用过一个库(不再使用它),它实际上设法保留了大量代表像素的有价值的数据。
请注意,如果有任何帮助,我手边有原始像素数据(2D int数组)。该应用程序将处理许多不同大小的图像,所以我不确定高度必须是1100像素。
感谢。
答案 0 :(得分:2)
您是否尝试在渲染提示中启用消除锯齿功能?这可能有所帮助。
如果没有,你可以很容易地编写自己的缩放功能。这实际上非常简单 - 你只需要:
正常的抗锯齿会使用类似源像素值的平均值作为公式,听起来你想要一些优先于特定值的东西(例如,如果背景像素的颜色值较低,则取最大像素值)