Какой шаг для 256-битного (8-битного) растрового изображения?

Здесь и в других местах есть много вопросов (и ответов) по поводу расчета шага. У меня есть несколько растровых изображений, которые мне нужно прочитать в память. Все отлично работает, если IFF они 16,5 миллионов цветов (24 бит). Однако мне нужно, чтобы они были только 256 цветов (8 бит), и когда я пытался загрузить точное изображение, но с меньшей глубиной цвета, он взрывался. Я мог бы просто жить с этим; за исключением того, что, очевидно, 256-цветное изображение намного меньше, чем 16,5-миллионное цветное изображение.

Итак, что такое шаг для 256-цветного серого (8-битного) изображения?

3 ответа

Решение

Для 8-битного изображения шагом будет ширина в пикселях. Это округляется до следующего кратного 4. Например, если изображение имеет ширину 198 пикселей, шаг будет 200.

Шаг 8-битного изображения равен ширине изображения.

Шаг будет зависеть от используемого формата цвета. Чтобы получить значение шага, вы умножаете количество байтов, используемых пикселем, на ширину изображения.

На самом деле нет ничего определяющего, каким должен быть шаг. Как правило, как уже говорилось, это ширина, округленная до следующего, кратного четырем, но на самом деле нет ничего, обеспечивающего это как стандарт.

Единственный способ быть полностью уверенным - это просто запросить его с картинки. Не было предоставлено никакой информации о том, как вы получаете доступ к данным изображения, но стандартный способ сделать это - создать Bitmap объект вашего изображения, и использовать bitmap.LockBits функция, чтобы получить BitmapData объект. В таком случае, Stride это просто свойство этого BitmapData объект.

Если у вас уже есть фактические данные изображения в виде байтового массива, вы, конечно, можете просто разделить их на высоту.

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