GrayScale (8 бит на пиксель) Манипулирование пикселями изображения в Java

Я слышал, что данные в полутоновых изображениях с глубиной цвета 8 бит хранятся в первых 7 битах байта каждого пикселя, а последний бит остается неизменным! Таким образом, мы можем хранить некоторую информацию, используя последний бит всех пикселей, это правда?

Если да, то как данные можно интерпретировать в отдельных пикселях? Я имею в виду нет красного, синего и зеленого! так что эти биты значат?

И как я могу рассчитать среднее значение всех пикселей изображения? Я предпочитаю использовать чистые классы Java, а не JAI или другие третьи стороны.

Обновление 1

BufferedImage image = ...; // loading image
image.getRGB(i, j);

Метод getRGB всегда возвращает int, который больше одного байта!!! Что я должен делать?

1 ответ

Решение

Насколько я понимаю, глубина цвета 8 бит означает, что на пиксель приходится 8 бит (то есть один байт), и что все это значение имеют красный, зеленый и синий цвета. например, оттенки серого =192 означает красный =192, зеленый =192, синий =192. Там нет 7 бит плюс еще 1 бит.

AFAIK, вы можете просто использовать нормальное среднее. Однако я бы использовал long на сумму и убедитесь, что каждый байт без знака, т.е. `b & 0xff

РЕДАКТИРОВАТЬ: Если серая шкала скажем 128 (или 0x80), я бы ожидал, что RGB будет 128,128,128 или 0x808080.

Другие вопросы по тегам