2013-09-23 6 views
0

Я пытаюсь преобразовать изображение в оттенках серого в массив байтов. Я использую следующий код. однако массив байтов, генерируемый, не имеет логического размера.ImageConverter byte a

ImageConverter converter = new ImageConverter(); 
byte[] test = (byte[])converter.ConvertTo(gpuMatch.Bitmap,typeof(byte[])); 

Изображение представляет собой серого 792x410 глубину 8 бит. так что should'nt размер массива будет 324720 байт? Я получаю что-то близкое к элементам 140122 в массиве байтов.

ImageConverter ic = new ImageConverter(); 
Image img = (Image)ic.ConvertFrom(test); 

Если я переконвертирую байты в изображение, изображение не повреждено. может кто-то объяснить, почему это несоответствие?

благодарит Kannan

+0

Может быть, вы должны сказать своей аудитории, что программирование lanuage мы находимся в и то, что ImageConverter вы используете? – Scheintod

+0

Прошу прощения. Я использую VS2010, C#, .net4.0. и класс system.Drawing.ImageConverter – kannan

ответ

1

Возвращаемый массив байт не сырое представление изображения, где один байт представляет собой один пиксель. Вместо этого зависит от формата изображения. Таким образом, вы получите разные результаты для jpeg, gif, png end and on.

Я думаю, что эта ссылка будет полезна:

http://www.vcskicks.com/image-to-byte.php

(это взято из этого ответа: Convert a bitmap into a byte array)

Связанная страница гласит:

Помнить о ImageConverter, заключается в том, что изображение будет напрямую преобразовано в байты. Таким образом, изображение в формате bmp и одно и то же изображение в формате png НЕ будет иметь один и тот же массив байтов. Поэтому, если вы хотите сравнить два изображения, например, вы должны убедиться, что они сначала в одном формате, прежде чем сравнивать их байтовые массивы.

Так я думаю, вы заметите, что массив умирает байты всегда будет примерно размером с файлом-образом вы читаете в.

+0

Заставляет меня задаться вопросом, какое возможное использование 'ImageConverter' могло бы быть лучше, чем' Image.Save (memstream, format) ', или, heck,' File.ReadAllBytes (path) '. – Nyerguds

0

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

Спасибо, Dave

0

, когда я использую метод потока, я получить фактические данные шестигранные. по-видимому, конвертер изображений использует тип изображения (по умолчанию для PNG?) во время процесса преобразования байтов. следовательно, несоответствие в размере массива байтов.

спасибо за вашу поддержку, Kannan

Смежные вопросы