| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Загрузка bitmap из ресурсов |
| Автор: ASMatic 22.6.2009, 19:26 |
| Здравствуйте ВИНградовцы - пришел я к вам с кучей вопросов после многих поисков) Решил вот попробовать свои силы в VC++2008 и не долго думая начал все с создания собственного интерфейса. Все шло норм пока не дошло к загрузке БМП с ресурсов. Bitmap->FromResource оказался не рабочим - пол ночи пытался загрузить и нарекал на незнание VC и работы с ресурсами - потом нашел на каком то форуме топик в котором говорилось что этот метод не особо дружит с *.bmp ,как оказалось - действительно FindResource и LoadResource прекрасно справились с задачей. Но всплыл другой момент - как передать HGLOBAL в bitmap?? Придумался (точнее в том же топике предлагалось)) - через MemoryStream-ы. Начал копать в их сторону( MemoryStream *ms = new... не хотел компалится)) Оказалось все не так как в BCB TMemoryStream-ы. Как вычитал что в VC++ нету совего класса и юзает он .NET . Но что за бред - не у всех же стоит .NET и что делать, таскать с собой библиотеки .NET или вообще юзеру сообщухи выдавать - "поставь себе .NET ,его мона скачать на микрософт.ком". Подскажите плз что можна придумать в этом варианте ПС в темы такое название, так как уверен что еще не раз придется спросить по дороге к завершению моего интерфейса. |
| Автор: Earnest 22.6.2009, 20:26 | ||
Нет уж, темы создавай по существу, по мере возникновения вопросов. Правила форума запрещают все в кучу валить. Насчет bmp, ничего не поняла, какие такие FromResource и NET. Ты уверен, что на MFC пишешь? В MFC и WinAPi есть LoadBitmap, прекрасно работающий. Что касается HGLOBAL, возвращаемого LoadResourse, то это и есть по cути адрес буфера, содержащего битмап. Если приспичило читать прямо, то ищи в MSDN описание формата ресурса (не уверена, что там чистый bmp). Но у меня никогда такой надобности не возникало, т.к. LoadBitmap всегда справлялся. |
| Автор: ASMatic 22.6.2009, 21:27 | ||||
| Извиняюсь за название темы по поводу MFC - думаю что я не под ним пишу) - создаю прожект - ПОЛНОСТЬЮ чистый,там галочка есть такая при создании. Создаю окошко (форму) и все остальное вручную - не знаю почему, но так решил - с чистого листа Битмап гружу с помощью GDI :
Например я заюзаю апишку LoadBitmap - будет у меня она в памяти,а как вывести в окно тогда? я выводил:
там без поинтера на Image (Bitmap) - ничего не поделать. Когда я сделал: bmp->FromHBITMAP((HBITMAP) LoadResource( NULL, FindResource( NULL, "#102", RT_BITMAP )), NULL); ничего не грузит.Думал воспользоватся методом bmp->FromStream() - но с потоками напряг - без .NET (как я вычитал) - не канают..... Может я и ошибаюсь - подскажите тогда как создать MemoryStream в msvc. Или как вывести битмап в окно |
| Автор: ASMatic 23.6.2009, 05:10 |
| ну что сказать - нашел как стримами без .НЕТ пользоватся - CreateStreamOnHGlobal. Но вот уже пошел на крайности и просто за капипастил себе в прожект чужие исходники - тож самое - не лоадит,в памяти есть моя картинка а в битмап не хочет грузить(( и к стати в памяти моя картинка получается без заголовка бмп-шного - эт так должно быть??? появился вариант - не правильно загружаю в ресурсы свой картинка. Подскажите как ето правильно делать Мой вариант: слева,где мона добавлять файлі в прожект есть Resource Files. Правая кнопка- >Add-> New Item->Resource File (.rs) добавил....потом клик-клик по тому файлу(как понял - редактируем) - ну и правая кнопочка - Add Resource->Bitmap ну и путь к файлу. вот так я это делаю) - мож чё не правльно и сильно смущает меня то что в памяти бмп без своего родненького заголовка. Указываю тип при загрузке (RT_BITMAP) но это же только в хорошо работающем LoadResource а не в Gdiplus::Bitmap.FromResource в котором не указывается тип загружаемого фойла,хотя и так понятно БИТМАП карочь мозги плывут - выхода не вижу,но папку с рисуночками рядом ложить - тоже бред полный подскажите ПЛЗ!!!!ПОЖАЙЛУСТАААААА |
| Автор: Andrey44 23.6.2009, 07:11 | ||
|
| Автор: ASMatic 23.6.2009, 08:58 |
| СПАСИБО! но кажется мне что действительно не правельно гружу в ресурсы(( - мож лучше в длл както подгрузить бмп и оттуда уже в память? - ну не знаю что уже думать.... после *image = Gdiplus::Image::FromStream(pStream); - в самом image -00000000000 сделал ктрлС-ктрлВ функции и вызвал её: PBITMAP bmp = new BITMAP; LoadImageFromResource( 102, RT_BITMAP, hInstance, (Image**) &bmp); -или чёт не правильно?? |
| Автор: Andrey44 23.6.2009, 09:09 | ||
|
| Автор: ASMatic 23.6.2009, 09:22 |
| извеняюсь я за тупость но тепрь оно даже в ресурсах не находит HRSRC hResource = ::FindResource(hInst, MAKEINTRESOURCE(res), pType); возвращает 0( -жаль - что мало опыта,но прошу помочь мне понять все +) hInst - норм res - 0х00000066 pType - BITMAP |
| Автор: Andrey44 23.6.2009, 09:52 |
| ASMatic, у вас проектик большой? Можете выложить? |
| Автор: ASMatic 23.6.2009, 10:13 |
| не вопрос - спасиб!!! проектик пустой мона сказать. 2.7Мб и так долго сюда лился что решил на обменник залить: http://www.sendspace.com/file/bh1vct |
| Автор: Andrey44 23.6.2009, 10:22 |
| А где там ссылка на скачивание? |
| Автор: ASMatic 23.6.2009, 10:25 |
| снизу большими буковками DOWNLOAD) на всякий там ливанул еще на рапиду.... http://rapidshare.com/files/247636172/temp.rar.html |
| Автор: Andrey44 23.6.2009, 14:15 | ||
| ASMatic, извини что задержался с твоим проектиком. Работа понимаешь Вот держи http://rapidshare.com/files/247694688/temp.rar.html Увидишь, я написал
По-аналогии сделаешь
IDB_JPG_TEST, _T("JPG") |
| Автор: ASMatic 23.6.2009, 17:06 |
| спасибки!!! ничего страшного - я тож не дождался и вырубился) -ну чё могу сказать - с меня +,только пока я маленький)) - надо постить,постить. Думаю что скоро все изменится... мдааа - проанализировал - и так оно всегда,шаг в сторону и не работать еще раз спасибо!!! оч благодарен - все прекрасно работает!!! |