Я не могу загрузить растровые изображения в WinCE

Я написал небольшой проект, выводящий иконки на экран на WinCE. Иконки представляют собой 16-цветные BMP-файлы размером 28x28, размещенные в основном файле ресурсов (Resources.resx) (у resx для основной Формы такая же проблема, и GIF-файлы тоже не работают).

При первой попытке получить любой битмап из ресурсов выбрасывается исключение типа Exception with Message "Exception" из Microsoft.AGL.Common.MISC.HandleAr, который вызывался из System.Drawing.Bitmap._InitFromMemoryStream.

У меня есть два устройства WinCE. Эта ошибка возникает только на одном из них; другой работает нормально. Помимо этой одной проблемы, приложение работает на обоих устройствах. Приложение также использует некоторый собственный код, который включает DIB, и это прекрасно работает. Есть идеи?

Обновление: такая же ошибка возникает, если я пытаюсь загрузить растровое изображение из файла. Я также пробовал 1-битные (черно-белые), 8-битные и 24-битные растровые изображения, но безрезультатно (фреймбуферы WinCE чаще всего 16-битные, но у меня нет редактора изображений, который может создавать 16-битные растровые изображения).


person Qwertie    schedule 27.10.2009    source источник
comment
Что это за устройства? Можешь кинуть ссылки на битмапы?   -  person MusiGenesis    schedule 27.10.2009
comment
На этих двух устройствах установлена ​​одна и та же сборка ОС? Или это два разных типа устройств? .NET CF использует кодеки изображений, предоставляемые операционной системой. Поэтому, возможно, определенные образы ОС могут не поддерживать все форматы файлов, описанные в документации.   -  person Christopher Fairbairn    schedule 28.10.2009
comment
Вы говорите, что можете создать DIB. Как насчет ДДБ? Поддерживает ли драйвер дисплея неисправного устройства 16-цветную палитру?   -  person ctacke    schedule 28.10.2009
comment
Есть ли какая-либо документация о том, как .NET CF использует кодеки, предоставляемые изображениями?   -  person Qwertie    schedule 29.10.2009
comment
Я попытался просто создать DDB и DIB в Compact Framework, и оба работали. См. blog.opennetcf.com/ctacke/ - конструктор (w,h) должен создавать DDB, конструктор (w,h,pixelformat) должен создавать DIB.   -  person Qwertie    schedule 29.10.2009


Ответы (1)


У меня похожая проблема, и я работаю над ней несколько дней. Следующее, что я собираюсь попробовать, это сохранить растровое изображение в виде DIB в файле ресурсов, загрузить его с помощью LoadResource, преобразовать его в DDB с помощью GetCompatibleDC и «отрисовать» DIB в DC, который должен создать DDB. Я думаю, что ключ в том, чтобы использовать CreateCompatibleBitmap. Я сообщу о своих выводах.

person Kevin H    schedule 17.12.2009
comment
Надеюсь, вы пишете это на C#... Я почти уверен, что файл ресурсов C# отличается от файла ресурсов C++. - person Qwertie; 17.12.2009