Java绘图图像插值

Java绘图图像插值,java,interpolation,bufferedimage,graphics2d,drawimage,Java,Interpolation,Bufferedimage,Graphics2d,Drawimage,我的问题涉及JavaGraphics2D中的drawImage方法(这是针对桌面应用程序的,不是Android) 我要绘制的缓冲区图像包含高分辨率二进制数据,大多数像素是黑色的,但我有一些稀疏的绿色像素(绿色像素表示来自传入原始数据流的数据点)。位图非常大,比我典型的面板大小大。我把它放大了,这样我就可以放大缩小了。问题是当我缩小时,我丢失了一些绿色像素。。例如,如果我的图像是1000像素,面板是250像素,那么每个方向(X和Y)的4个像素中会损失1个。如果在缩放像素时使用最近邻插值,像素可能会

我的问题涉及JavaGraphics2D中的drawImage方法(这是针对桌面应用程序的,不是Android)

我要绘制的缓冲区图像包含高分辨率二进制数据,大多数像素是黑色的,但我有一些稀疏的绿色像素(绿色像素表示来自传入原始数据流的数据点)。位图非常大,比我典型的面板大小大。我把它放大了,这样我就可以放大缩小了。问题是当我缩小时,我丢失了一些绿色像素。。例如,如果我的图像是1000像素,面板是250像素,那么每个方向(X和Y)的4个像素中会损失1个。如果在缩放像素时使用最近邻插值,像素可能会消失为黑色。如果我使用类似双线性插值的方法,我的绿色像素将重新着色到黑色和绿色之间的某个位置

我理解所有这些行为,但我的问题是,有没有办法得到我想要的行为,也就是确保如果任何像素是非黑色的,我希望它以全强度绘制。也许有点像“最大保持”插值

我意识到我可以通过在黑色背景上绘制形状原语来做我想做的事情,也许这就是我必须要做的。但是我使用位图是有原因的(这与我在一个下降的光谱图类型的显示器中显示数据有关——它确实有一种模式,所有像素都可以着色,而不仅仅是黑色和绿色)


谢谢,

您可以查看drawImage的实现并覆盖它以获得所需的行为,但是扩展的核心可能使用硬件加速,因此在Java中重新实现它将非常缓慢

你可以看看JOGL,但我的印象是,如果你的像素非常稀疏,只需在黑色背景上(或在图像上)绘制绿色像素,既容易编码,又非常快速。
如果点的数量开始过高,您甚至可以在绘制点和缩放图像之间进行启发式切换

您可以使用自己的插值算法扫描图像并逐像素绘制,但这可能会很慢。你可以尝试在或同时找到一些东西。但出于性能考虑,我真的认为您应该使用绘图原语渲染场景。“在每个方向上损失4个像素中的1个”否,4个像素中的3个。@oldrinb
RescaleOp
不是用于更改图像的大小,而是用于对像素的颜色值应用线性函数。