我需要渲染位圖圖像(在我的PC上),旨在顯示在具有極其有限的調色板的設備上(例如,由RED( 0xFF0000),DARK_RED(0x880000),灰色等)。我只需要渲染2D幾何對象 - 文本,點,線,多邊形和弧。我想使用抗鋸齒(雖然由於有限的調色板本身可能非常有限)。我希望在將其保存爲屏幕之前將其顯示在屏幕上,例如將PNG傳輸到目標設備。使用有限的調色板渲染目標爲設備的2D圖像
假設我從一個從BufferedImage獲得的GraphicsD obj開始,那麼基本方法是什麼?我知道如何在AWT框架上顯示圖像,以及如何使用ImageIO保存圖像,但不清楚如何使用特定調色板渲染圖形。
選項春記有:
使用Graphics2D的API渲染它在全24位色彩,並啓用抗鋸齒。後處理將每種顏色映射到目標調色板中最近的鄰居。
說服Graphics2D使用目標調色板(IndexColorModel?)。通過Graphics2D API進行渲染。
寫我自己的圖元渲染線條,形狀等
選項3,我並不熱衷。選項1是可行的,但我不禁覺得如果反對目標調色板的話,反鋸齒效果會更好。這可能只是偏執狂。
選項2對我來說不清楚,也許不可能。
想法?
這可能是一個愚蠢的問題,但如果您使用的是Graphics2D,您可以不選擇使用已知調色板之外的顏色進行繪製嗎?或者,它可能會使用調色板之外的顏色,而您擔心的反鋸齒?只有16種顏色,抗鋸齒可能看起來不太好。 – NESPowerGlove
我想根據目標調色板使用抗鋸齒渲染最終圖像。所以,例如,RED對象的邊緣將會有一些DARK_RED像素(假設黑色背景)。 –
正常渲染,然後將圖像轉換爲目標調色板,例如,使用顏色抖動(最有可能優化了有限的調色板),請參閱相關的[將BMP圖像轉換爲繪圖儀指令集?](http://stackoverflow.com/ a/36820654/2521214) – Spektre