我的意思是相當於AWT的BufferedImage#getType()
,或其他什麼讓我寫一個簡單的isGrayscale()
方法。有可能知道SWT圖像是灰度還是RGB?
我正在使用SWT,因爲我需要讀取AWT無法打開的TIF圖像。
我的目標是在任意圖像上繪製(使用顏色),如果是灰度圖,我必須首先創建一個RGB圖像並在繪製之前將B像素複製到其中。知道圖像是否已經是RGB將保存該轉換過程。
最終代碼,基於以下
Alex的解決方案,我用總體標準差爲RGB值的更精細的控制。
private static final double GRAY_LEVEL_STD_SIGMA = 2.4;
public static boolean isShadowOfGray(RGB color) {
// pure shadow
if (color.red == color.green && color.green == color.blue) {
return true;
}
// Standard deviation filter
double mean = (color.red + color.green + color.blue)/3;
double std = Math.sqrt((
Math.pow(color.red - mean, 2) +
Math.pow(color.green - mean, 2) +
Math.pow(color.blue - mean, 2))/3);
return (std < GRAY_LEVEL_STD_SIGMA);
}
順便說一句,我認爲「直接」調色板圖像永遠是RGB(它們不包含getRGBs直接值())。解決方案代碼沒有針對該類圖像的專用像素循環。