Автор | Сообщение |
|
| Администратор
|
Пост N: 1231
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.11.09 10:51. Заголовок: Как прочитать BITMAP из ресурса
Я использую библитеку freeimage, у которой есть функции для чтения картинок: fi_load и fi_loadfrommem У меня картинка находится в самом файле exe в bitmap-ресурсе. Функцию fi_load в этом случае использовать нельзя, я хочу загрузить ресурс в символьную переменную, и затем вызвать fi_loadfrommem. Вопрос: как прочитать ресурс из exe ? LoadResource возвращает handle, а что с ним делать дальше ?
|
|
|
Ответов - 8
[только новые]
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 23.11.09 11:30. Заголовок: А надо именно посред..
А надо именно посредством freeimage, или можно ресурсником ?
|
|
|
|
| Администратор
|
Пост N: 1232
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.11.09 11:39. Заголовок: fil пишет: А надо и..
fil пишет: цитата: | А надо именно посредством freeimage |
| Да. Я храню картинки в мемо-полях и загружаю их посредством fi_loadfrommem. Но некоторые картинки надо загружать в любом случае. Загружать их из файла (bmp, jpg) неудобно, хотелось бы из ресурса.
|
|
|
|
| постоянный участник
|
Пост N: 757
Зарегистрирован: 09.10.06
|
|
Отправлено: 23.11.09 11:43. Заголовок: Воспользуйтесь Load..
Воспользуйтесь LoadBitmap, LoadImage или LoadImageFromRes для получения bitmap потом fi_bitmap := fi_BitmapToFi( bitmap ) DeleteObject(bitmap) и дальше.. HB_FUNC ( LOADBITMAPFROMRES ) { HBITMAP hBitmap; hBitmap = (HBITMAP) LoadImage( GetModuleHandle( NULL ), hb_parc( 1 ), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION ); hb_retnl( (LONG) hBitmap ); //hb_retptr( (void*) hBitmap ) }
|
|
|
|
| постоянный участник
|
Пост N: 758
Зарегистрирован: 09.10.06
|
|
Отправлено: 23.11.09 11:50. Заголовок: Pasha пишет: Загруж..
Pasha пишет: цитата: | Загружать их из файла (bmp, jpg) неудобно, хотелось бы из ресурса |
| Из bmp HB_FUNC ( LOADBITMAPFROMFILE ) { HBITMAP hBitmap; hBitmap = (HBITMAP) LoadImage( 0, hb_parc( 1 ), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION ); hb_retnl( (LONG) hBitmap ); //или hb_retptr( (void*) hBitmap ); }
|
|
|
|
| Администратор
|
Пост N: 1233
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.11.09 15:24. Заголовок: Как оказалось, у фай..
Как оказалось, у файла bmp есть еще заголовок, а в ресурсе он хранится без заголовка Поэтому достаточно прицепить спереди заголовок. В результате у меня получилась такая функция: #include "hbapi.h" #include "windows.h" HB_FUNC( LOADBMPRES ) { HINSTANCE hMod = GetModuleHandle( 0 ); HRSRC hRes = FindResource( hMod, ( LPSTR ) hb_parc( 1 ), ( LPSTR ) RT_BITMAP ); LONG ulLen = SizeofResource( hMod, hRes ); HGLOBAL hglb = LoadResource( hMod, hRes ); BITMAPFILEHEADER bmpFH; char *szStr; bmpFH.bfType = 0x4d42; bmpFH.bfSize = ulLen + sizeof( bmpFH ); bmpFH.bfReserved1 = bmpFH.bfReserved1 = 0; bmpFH.bfOffBits = 0x3e; if( ulLen ) { szStr = hb_xgrab( ulLen + sizeof( bmpFH ) ); memcpy( szStr, (char *) &bmpFH, sizeof( bmpFH ) ); memcpy( szStr + sizeof( bmpFH ), (char *) LockResource( hglb ), ulLen ); UnlockResource( hglb ); FreeResource( hglb ); hb_retclen( szStr, ulLen + sizeof( bmpFH ) ); hb_xfree( szStr ); } else hb_retc( "" ); }
|
|
|
|
| Администратор
|
Пост N: 1234
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.11.09 15:59. Заголовок: Петр пишет: fi_Bitm..
Петр пишет: А что это за функция ? Я ее не нахожу
|
|
|
|
| модератор
|
Пост N: 1103
Зарегистрирован: 25.05.05
|
|
Отправлено: 23.11.09 16:21. Заголовок: Pasha пишет: что эт..
Pasha пишет: Это - функция из contrib библиотеки xharbour\contrib\ freeimage. // -------------------------------------------------------------------------- // Convert from HBITMAP to FreeImage ---------------------------------------- // -------------------------------------------------------------------------- // implementation: FIBITMAP *dib = FI_BitmapToFi( HBITMAP bitmap ); HB_FUNC( FI_BITMAPTOFI ) ...
|
|
|
|
| Администратор
|
Пост N: 1235
Зарегистрирован: 23.05.05
|
|
Отправлено: 23.11.09 16:24. Заголовок: нашел, спасибо..
нашел, спасибо
|
|
|
|