Преобразование растрового изображения в производительность двоичного массива - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть массив растровых изображений, который содержит более 500 объектов растровых изображений.Мне нужно преобразовать каждый объект Bitmap в массиве в двоичный массив.Для этого я использую класс MemoryStream:

using (MemoryStream ms = new MemoryStream())
 {
    images[0].Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    byte[] byteData = ms.ToArray();
}

Я хотел бы знать, есть ли другой способ добиться этого.Я не уверен, насколько дорог этот процесс.

Спасибо

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Выбирая Gif, вы заставляете процессор / память заменять то, что вам, скорее всего, не нужно.В частности, Gif будет меньше, но его сжатие займет некоторое время (если изображения уже не в формате) относительно использования BMP.

Если вы копируете их достаточно, чтобы у вас была памятьпроблемы с пропускной способностью (и не могут это исправить) это хорошая идея, но в противном случае вам следует придерживаться BMP.На самом деле, для 500 изображений я бы ожидал, что это займет максимум 1-2 секунды, поэтому вам не нужно беспокоиться о такого рода микрооптимизации.Если это займет много времени, вы можете перейти к неуправляемому коду, который, вероятно, будет работать лучше, потому что у вас будет более точный контроль над распределением памяти и копиями.

1 голос
/ 29 сентября 2011

Я провел несколько тестов скорости и самое быстрое преобразование в ImageFormat.Bmp. Не нужно делать никакого сжатия. Хотя лучший формат будет также зависеть от того, что вы планируете делать с данными после этого.

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

...