Компактный каркас - какая-либо реализация Image.FromStream (Stream, Boolean, Boolean)? - PullRequest
4 голосов
/ 13 ноября 2008

В написанном мною приложении .NET CF одной из функций является получение кадров с удаленных камер. Кадры получаются в виде одиночных изображений JPEG и отображаются на экране при их наличии.

Это было достаточно хорошее решение, но мне не нравится тот факт, что время, необходимое для преобразования потока в Image объект с конструктором Bitmap(), составляет намного, намного больше чем требуется время для загрузки потока.

Когда я просмотрел некоторые блоги в поисках этой проблемы, я обнаружил, что некоторые разработчики использовали метод Image.FromStream(), который имеет флаг validateImageData, который, кажется, контролирует некоторый код проверки. Когда validateImageData ложно, преобразование становится значительно быстрее.

Хорошо, я думал .... но Compact Framework не реализует этот метод!

Кто-нибудь знает, как обойти это или, по крайней мере, как преобразовать поток в Image без лишних задержек?

Ответы [ 2 ]

1 голос
/ 02 сентября 2009

Не уверен, поможет ли это, но OpenNETCF.Drawing.Imaging имеет классы для чтения изображений из потоков, но они представляют собой обернутые объекты IImage. Затем вы можете использовать IImage.Draw, чтобы нарисовать его на своем растровом изображении. Он также имеет метод GetThumbnail, который я использую для получения масштабированного изображения больших jpegs на устройстве.

Здесь - запись в блоге Алекса Фейнмана.

1 голос
/ 13 ноября 2008

Если размеры JPEG большие (например, 1200 x 1600 или что-то в этом роде), то одна из проблем со скоростью, которая возникает на вашем устройстве с конструктором растровых изображений, заключается в размере растрового изображения, которое необходимо создать в памяти ( растровое изображение также будет 1200 x 1600, даже если оно будет отображаться на экране размером 240 x 320). Если вместо полноразмерного можно получить JPEG с уже существующим размером 320 X 240, время создания растрового изображения должно быть значительно меньше.

Я не смог найти альтернативы отсутствующему методу FromStream, кроме конструктора Bitmap. Если вы знакомы с форматом JPEG, я не думаю, что было бы слишком сложно написать собственный конвертер JPEG-BMP, но я бы предположил, что он не будет быстрее, чем Bitmap ().

Редактировать: извините, я имел в виду, что ваш конвертер не будет быстрее конвертировать JPEG размером 240 x 320 в растровое изображение размером 240 x 320. Я думаю, что это можно было бы сделать намного быстрее при преобразовании намного большего JPEG в растровое изображение 240 X 320, потому что это могло бы пропустить этап создания полноразмерного растрового изображения первым.

...