2012-09-20 78 views
3

我的問題涉及的Java的Graphics2D(這是一個桌面應用程序,而不是安卓)的的drawImage方法。我想繪製包含高分辨率二進制數據,大多數像素是黑色的,但我有一些稀疏的綠色像素(綠色像素表示來自原始數據流的數據點)。我想繪製包含高分辨率二進制數據。位圖非常大,比我的典型面板尺寸大。我做得很大,所以我可以放大和縮小。問題是當我縮小時,我失去了一些綠色像素。例如,如果我的圖像是1000像素,面板是250像素,我會在每個方向(X和Y)上失去4個像素中的1個。如果我在縮放時使用最近鄰插值,則像素可能會消失爲黑色。如果我使用雙線性插值之類的東西,我的綠色像素會重新着色到黑色和綠色之間。的Java的drawImage插值

我明白所有這些行爲,但我的問題是,有什麼辦法可以獲得我想要的行爲,即確定是否有任何像素是非黑色的,我希望它以全部亮度繪製。也許像「最大保持」插值。

我意識到我可以通過在黑色背景上繪製形狀原始圖來做我想做的事,也許這就是我必須做的。但是我使用位圖有一個原因(與我在一個正在下降的光譜圖類型的顯示器中顯示數據有關),而且它確實有一種模式,所有像素都可以被着色,而不僅僅是黑色和綠色)。

感謝,

+0

您可以使用自己的插值算法掃描圖像並繪製每像素像素,但這可能會很慢。您也可以嘗試在[JAI](http://www.oracle.com/technetwork/java/index.html)或[ImageJ](http://rsbweb.nih.gov/ij/)上找到某些內容。但我真的認爲你應該使用繪圖原語渲染場景,出於性能原因。 –

+0

*「在每個方向上失去4個像素中的1個」*不,4箇中的3個。 –

+0

true,3個我們的4個,我的錯誤 –

回答

0

你可以看看的drawImage的實施和覆蓋它來獲得你想要的行爲,但是可能縮放的核心採用硬件加速,所以重新在Java中實現這將是非常緩慢的。

你可以看看JOGL,但我的印象是,如果你的像素真的稀疏,只需在黑色背景上(或在圖像上)繪製綠色像素就會很容易編碼,而且速度非常快。 如果點數過多,您甚至可以在繪製點與縮放圖像之間進行啓發式切換。