Как Bitmap.Save (Stream, ImageFormat) форматирует данные? - PullRequest
1 голос
/ 07 апреля 2010

У меня непрозрачное цветное растровое изображение длиной 2480 и шириной 3507.

Использование Bitmap.GetPixel(int x, int y) Я могу получить информацию о цвете каждого пикселя в растровом изображении.

Если я добавлю растровое изображение в байт []:

MemoryStream ms = new MemoryStream();
bmp.Save(ms, ImageFormat.Bmp);
ms.Position = 0;
byte[] bytes = ms.ToArray();

тогда я ожидаю, что у меня будет та же информация, то есть я могу перейти к байту [1000] и прочитать информацию о цвете для этого пикселя.

Оказывается, мой массив байтов больше, чем я ожидал. Я думал, что получу массив с 2480 x 3507 = 8697360 элементов. Вместо этого я получаю массив с 8698438 элементами - какой-то заголовок, который я предполагаю.

В каком формате хранятся байты в моем массиве? Есть ли заголовок длиной 1078 байт, за которым следуют значения Alpha, Red, Green, Blue для каждого байтового элемента или что-то еще?

Все, что мне нужно, это информация о цвете для каждого пикселя. Меня не интересует заголовок (или даже прозрачность), если он мне не нужен для получения информации о цвете.

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010

Вы вызываете GetBuffer, который возвращает базовый байтовый массив - это больше, чем фактическая длина потока.

Либо используйте

byte[] bytes = ms.ToArray();

или используйте GetBuffer, но в сочетании с ms.Length.

Сказав это, вы сохраняете его как BMP - так что там также будет информация заголовка; это не так, как первый байт будет представлять первый пиксель. К сожалению, насколько я вижу, нет «необработанного» формата изображения ... это звучит так, как вы действительно хотите.

Вы можете использовать Bitmap.LockBits, а затем скопировать данные оттуда, если хотите ...

0 голосов
/ 07 апреля 2010

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

...