2012-05-06 25 views
0

在Java中,可以將包含多種顏色的圖像加載到具有BufferedImage.TYPE_BYTE_BINARY顏色空間的BufferedImage對象中,然後該圖像變爲黑/白。我想知道的是如何完成黑色/白色的「重新着色」:每個像素是否獨立於其他像素而改變,例如,通過查看當前像素的顏色是否比黑色更接近黑色,或者是否將某個相鄰像素考慮在內?如何轉換爲BufferedImage.TYPE_BYTE_BINARY?

狀態的文檔BufferedImage.TYPE_BYTE_BINARY:

When color data is stored in an image of this type, the closest color in 
the colormap is determined by the IndexColorModel and the resulting index 
is stored. 

我想這意味着每個像素的顏色與其相鄰的像素的顏色獨立地進行更改或者這是否意味着引用別的東西?我對成像不太熟悉,這就是爲什麼我想知道我是否正確。

+0

你的解釋是對的。每個像素單獨處理。 –

+0

感謝您的確認:-) –

回答

0

如果不涉及縮放,則轉換應該是一對一的。在從彩色轉換爲黑白的情況下,可以通過計算像素顏色的灰度值來完成,如Gray = 0.299×Red + 0.587×Green + 0.114×Blue,並將閾值128應用於結果。如果它大於128,則將其設爲白色;否則,使它變黑。假設色彩地圖中的第一項是黑色,第二項是白色,那麼灰度值大於128的像素將被賦予入口索引1,而其他像素將被賦予索引0;

注: 類型的BufferedImage BufferedImage.TYPE_BYTE_BINARY具有不帶alpha一個IndexColorModel。它表示一個不透明的字節填充1,2或4位圖像,即具有適當顏色條目的色彩圖的2色,4色和16色圖像。如果在不傳遞IndexColorModel的情況下構造BufferedImage,則會創建一個默認的back-n-white colormap,其中包含兩個條目{0,0,0}和{255,255,255}。但是這並不侷限於黑白,您可以從默認的sRGB ColorSpace中選擇任意兩種顏色,並創建一個IndexColorModel傳遞給BuffereImage構造函數。您可以使用IndexColorModel以相同的方式創建4色和16色圖像。