3

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

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

我理解所有这些行为,但我的问题是有什么方法可以获得我想要的行为,即确保是否有任何像素是非黑色的,我希望它以最大强度绘制。也许类似于“最大保持”插值。

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

谢谢,

4

1 回答 1

0

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

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

于 2012-10-26T23:48:49.797 回答