Compact Framework - любая реализация Образа.FromStream (Поток, Логическое значение, Boolean)?
-
08-07-2019 - |
Вопрос
В приложении .NET CF, которое я написал, одной из функций является получение кадров с удаленных камер.Кадры получаются в виде отдельных изображений в формате jpeg и отображаются на экране, когда они доступны.
Это было достаточно хорошее решение, но мне не нравится тот факт, что время, необходимое для преобразования потока в Image
объект, с Bitmap()
конструктор, является намного, намного, намного больше чем время, необходимое для загрузки потока.
Когда я просмотрел несколько блогов в поисках информации об этой проблеме, я обнаружил, что некоторые разработчики использовали Image.FromStream()
метод, который имеет validateImageData
флаг, который, по-видимому, управляет некоторым кодом проверки.Когда validateImageData
если значение равно false, преобразование происходит значительно быстрее.
" Хорошо", - подумал я ....но Compact Framework не реализует этот метод !
Кто-нибудь знает, как обойти это, или, по крайней мере, как преобразовать поток в Image
без лишних задержек ?
Решение
Не уверен, поможет ли это, но OpenNETCF открыт.Рисование.В Imaging есть классы для чтения изображений из потоков, но они представляют собой com-объекты, обернутые в IImage.Затем вы можете использовать IImage.Draw, чтобы нарисовать его на своем растровом изображении.В нем также есть метод GetThumbnail, который я использую для получения масштабированного изображения больших файлов jpeg на устройстве.
Здесь об этом есть запись в блоге Алекса Фейнмана.
Другие советы
Если размеры JPEG большие (например, 1200 x 1600 или что-то в этом роде), то одна из проблем со скоростью работы вашего устройства с конструктором Bitmap заключается в размере растрового изображения, которое необходимо создать в памяти (растровое изображение также будет 1200 x 1600, даже если оно затем отображается на экране 240 X 320).Если вы можете получить формат JPEG размером 320 X 240 вместо полноразмерного, время создания растрового изображения должно быть намного меньше.
Я не смог найти никаких альтернатив отсутствующему методу FromStream, кроме конструктора Bitmap.Если вы знакомы с форматом JPEG, я не думаю, что было бы слишком сложно написать свой собственный конвертер JPEG в BMP, но я бы предположил, что это будет не быстрее, чем Bitmap ().
Редактировать:извините, я имел в виду, что ваш собственный конвертер не будет быстрее преобразовывать формат 240 X 320 JPEG в растровое изображение 240 X 320.Я думаю, что это можно было бы сделать намного быстрее при преобразовании гораздо большего формата JPEG в растровое изображение размером 240 X 320, потому что при этом можно было бы пропустить этап создания полноразмерного растрового изображения.