0
在Efford的CD有灰度圖像量化代碼:圖像量化
int n = 8 - numBits;//numBits will be taken as input
float scale = 255.0f/(255 >> n);
byte[] tableData = new byte[256];
for (int i = 0; i < 256; ++i)
tableData[i] = (byte) Math.round(scale*(i >> n));
LookupOp lookup =
new LookupOp(new ByteLookupTable(0, tableData), null);
BufferedImage result = lookup.filter(getSourceImage(), null);
return result;
我想這個代碼轉換爲24位彩色圖像。 但不知道我是否正確?
我的嘗試: int n = 24 - numBits;
float scale = 16777216.0f/(16777216 >> n);
byte[] tableData = new byte[16777216];
for (int i = 0; i < 16777216; ++i)
tableData[i] = (byte) Math.round(scale*(i >> n));
LookupOp lookup =
new LookupOp(new ByteLookupTable(0, tableData), null);
result = lookup.filter(img2, null);
//return result;
,這給結果圖像化,直到加numBits> = 17,如果加numBits < 17然後我得到完整的黑色圖像。 我正確嗎?
請大家幫忙。 非常感謝。 :)
感謝JPA 後來我讀lookup.filter照顧彩色圖像模型 的我只想量化彩色圖像使用類似的邏輯 –
公衆最終BufferedImage的過濾器(SRC的BufferedImage, 的BufferedImage DST) 執行上的查找操作的BufferedImage。如果源圖像中的顏色模型與目標圖像中的顏色模型不同,則將在目標中轉換像素。如果目標圖像爲空,則會使用適當的ColorModel創建BufferedImage。如果LookupTable中的數組數量不符合上面的類註釋中所述的限制,或者源圖像具有IndexColorModel,則可能會拋出IllegalArgumentException。 –