LoadImage() из массива.
Раньше картинку я загружал так:
HBITMAP hBitmap = (HBITMAP)::LoadImage(0, "c:\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
А вот теперь необходимо тоже сделать, но загрузить из массива.
Пока делаю так: сохраняю массив в файл, а потом читаю вышеуказанной функцией.
Подскажите, можно ли обойтись без выгрузки в файл, а напрямую загрузить из массива?
SetBitmapBits( HBITMAP hbmp, DWORD cBytes, CONST VOID *lpBits);
SetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines,CONST VOID *lpvBits, CONST BITMAPINFO *lpbmi, UINT fuColorUse);
FILE *f;
f = fopen("C:\\1.bmp","r");
fread(mass,1024,1,f);
fclose(f);
А вот как теперь?
Если хочешь жестко запихать картинку в свое приложение, то для этого есть ресурсы. Если нет - ну так и грузи ее из файла... Что еще надо?
FILE *f;
f = fopen("C:\\1.bmp","r");
fread(mass,1024,1,f);
fclose(f);
А вот как теперь?[/QUOTE]
Это уже не массив данных с изображением. Это уже просто копия файла bmp в памяти. А там самих данных картинки содержатся еще и заголовки с параметрами этих данных. Так что или считывать уже вручную из памяти так же как из файла. Благо что формат там элементарный. Либо перенаправлять как то чтение из файла в чтение из памяти для стандартных функций. Хотя дейстаительно непонятно зачем такое надо - считывать файл в память, а потом доставать битмап уже оттуда )))
У меня картинка-заставка занимает около 500кБ. Пробовал ее оптимизировать в фотошопе - теряется красота. Сжал зипом - около 30кБ. Достаю из ресурса архив, распаковываю в память и ... застрял. Сейчас распаковываю во временной файл, вывожу заставку, а потом файл удаляю. Но здесь появляется дополнительная задержка. Вот я и хотел доставать картинку из памяти.
Создал поверхность и кидай туда содержимое массива.
for(int index=0; index<5; index++)
{
hBmp[index] = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"1.bmp",
IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
}
Попробуй так...
Хех! Не обратил внимания! 10.02.2005!!!