Позвольте сначала сказать, что есть несколько путей достижения этого.
Я бы сказал, получить размер изображения, используя (что-то вроде)
int myHeight = myImage.getHeight();
int myWidth = myImage.getWidth();
Я бы сказал, в этом случае вы также можете проверить конфигурации битовой карты», как это может быть один из 3-х различных форматов
ALPHA_8, ARGB_8888, or RGB_565
Вы получаете конфигурацию, используя процедуру
myImage.getConfig()
. Мы вернемся к тому, как это следует использовать позже.
Теперь, когда вы знаете размер изображения, вы должны запустить структуру двойной петли следующим образом:
boolean isGrayscaleImage = true; // assume it is grayscale until proven otherwise
for(int i = 0; i < myWidth; i++){
for(int j = 0; j < myHeight; j++){
int currPixel = myImage.getPixel(i, j);
if(false == isGrayScalePixel(currPixel)){
isGrayscaleImage = false;
break;
}
}
}
Назад к КАК ТЕСТ если пикселы GRAYSCALE: Если изображение хранится в виде ALPHA_8 так ли на самом деле это не изображение в оттенках серого, но оно может быть технически преобразовано в одно, превратив изображение в изображение ARGB_8888 и установив значение Alpha в 0xFF и каждый из компонентов R, G и B на альфа-значение, предоставленное в оригинале 8-разрядное изображение на основе ALPHA_8.
Если изображение RGB_565 отформатировано, это немного сложнее, так как вам придется самостоятельно разделить значения R, G и B в свои собственные байты с помощью операторов shift и MASKING. Как только вы это сделали, это похоже на обработку изображения ARGB_8888 (об этом говорилось ниже).
Для изображения ARGB_8888: альфа-канал ДОЛЖЕН всегда быть 0xFF.
Как указано в вашем вопросе пиксель считается полутоновой если R == G == B SO (Пример кода может выглядеть следующим образом)
boolean isGrayScalePixel(int pixel){
int alpha = (pixel && 0xFF000000) >> 24;
int red = (pixel && 0x00FF0000) >> 16;
int green = (pixel && 0x0000FF00) >> 8;
int blue = (pixel && 0x000000FF);
if(0 == alpha && red == green && green == blue) return true;
else return false;
}
Есть оптимизаций, которые могут быть сделаны, но я Я пытаюсь документировать основной алгоритм для вас.
Надеется, что это помогает вам :-)
Это то, что я сделал, но пиксели в изображении в градациях серого получили разные значения, и я думаю, что вы должны получить то же самое. Это моя проблема. – SamuSan
Ну ......... Вот как вы проверяете, каков ваш вопрос. У вас есть реальный образ, вы открыли его в приложении для обработки изображений и увеличили масштаб, чтобы увидеть, действительно ли есть цвета, которые не оттенки серого ??? – trumpetlicks
Я применяю проверку как шаг предварительной обработки изображения сразу после загрузки без масштабирования или других операций. Если это изображение открывается с помощью Matlab, я нашел его как изображение только с одним слоем, и это изображение в оттенках серого (не индексированное цветное изображение) с пикселами в уровнях от 0 до 255. – SamuSan