Я использую несколько 32-битных файлов PNG в своем проекте VS2010 и загружаю их в растровые изображения GDI + с помощью LoadResource / LockResource и т. Д. И создаю из IStream. Все отлично работает на моей машине для разработки Win7.
Тем не менее, я делаю некоторые цвета и альфа-маскирование, используя SetColorMatrix / ImageAttributes, который отлично работает на Win7, но когда я запускаю его на XP и вызываю Bitmap :: DrawImage с параметром ImageAttributes, PNG вообще не рисуется , Похоже, в любой момент не было никаких ошибок, указывающих на проблему, она просто не видна.
Если я запускаю тот же код с изображением, загруженным непосредственно из файла, а не из ресурса, он отлично работает на XP и Win7, но я не очень хочу связывать файлы PNG в моем установщике - кажется, немного бодж. Чтобы сделать эту жизнь еще более захватывающей, моя машина XP слишком медленная, чтобы даже подумать о том, чтобы запустить VS2010!
Есть ли у кого-нибудь какие-либо идеи о том, что может вызвать это, или предложения, чтобы отследить проблему, потому что я потратил много времени на это, и у меня нет вдохновения.
Заранее спасибо.
Обновление:
После дополнительного тестирования я не дошел до конца, но есть убедительные доказательства того, что использование конструктора Bitmap (IStream *) каким-то образом искажает альфа-канал в PNG с прозрачностью. Я точно не понял, что происходит, но я нашел решение - теперь я использую FreeImage для загрузки PNG из файла ресурсов, а затем создаю объект Bitmap из необработанных данных изображения в FIBITMAP. Это работает отлично, поэтому доказательства указывают на проблему с этим конструктором Bitmap.
Обновление 2:
Класс, который я создал, чтобы использовать FreeImage для загрузки файлов PNG из ресурсов, прекрасно работает, поэтому для удобства я решил использовать его для загрузки всех своих изображений, но у него возникли проблемы с загрузкой стандартных файлов BMP. После небольшого исследования кажется, что, когда вы включаете файлы BMP в качестве ресурсов BITMAP, первые 14 байтов файла BMP удаляются, прежде чем они сохраняются в пакете ресурсов, что затрудняет загрузку их чем-либо еще. В любом случае, это легко обойти - я просто изменил тип ресурса ресурсов "BITMAP" на "BMP", поэтому он в основном обрабатывает его как неизвестный тип и сохраняет весь файл. Так что теперь все работает как задумано. Просто подумал, что я опубликую этот опыт и, надеюсь, сэкономлю кому-то еще час, если они попытаются сделать то же самое.