On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
Администратор




Пост 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, а что с ним делать дальше ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 23.11.09 11:30. Заголовок: А надо именно посред..


А надо именно посредством freeimage, или можно ресурсником ?

Спасибо: 0 
Цитата Ответить
Администратор




Пост N: 1232
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.09 11:39. Заголовок: fil пишет: А надо и..


fil пишет:

 цитата:
А надо именно посредством freeimage



Да. Я храню картинки в мемо-полях и загружаю их посредством fi_loadfrommem. Но некоторые картинки надо загружать в любом случае. Загружать их из файла (bmp, jpg) неудобно, хотелось бы из ресурса.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 )
}


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост 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 );
}


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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( "" );

}



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1234
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.09 15:59. Заголовок: Петр пишет: fi_Bitm..


Петр пишет:

 цитата:
fi_BitmapToFi( bitmap )



А что это за функция ? Я ее не нахожу

Спасибо: 0 
ПрофильЦитата Ответить
модератор




Пост 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 )
...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1235
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.09 16:24. Заголовок: нашел, спасибо..


нашел, спасибо

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 31
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет