Loading Bitmaps without reasources?

Started by
5 comments, last by ztn 22 years, 6 months ago
I''m learning to load bitmaps into my apps using Win32 API. The methods i''ve found use reasource files, which seems stupid becuase they keep the image data in the executible (which is silly for big images) and thusly you have to recompile evey time an image is updated. How do you write loading code that reads in the image from the file during run time? thanks, zTn PS no, i''m not too worried about performance...
Advertisement
Hello zTn!

To Load bitmaps without using a recsource with standard win32 API functions is "very simple", at first it may look diffucult, but once you know it, you know it
I make my programs with Delphi (pascal), so the following code is in pascal, translating to c++ if you want to do that, ain''t that difficult.

But here''s the code:

//Use the function loadimage, this will return a handle, that
//is an identifier, something like a pointer, for that
//bitmap from windows.

var BitmapHandle:hBitmap;
PathAndFilenameWithExtension:String;
BitmapWidth:Integer;
BitmapHeight:Integer;

//For example: PathAndFilenameWithExtension:=''Bitmap.bmp'';
// BitmapWidth:=100;
// BitmapHeight:=75;

BitmapHandle:=LoadImage(0,pchar(PathAndFilenameWithExtension),IMAGE_BITMAP,BitmapWidth,BitmapHeight,LR_LOADFROMFILE);

//Next load the bitmap into the devicecontext (if you don''t
//know what that is mail me, or see documentation on GameDev).

//I assume you have the handle of your window stored in the
//variable WindowHandle.

var DC:hDC;
BitmapDC;
WindowHandle:THandle;

//A handle from the DC (Device Context) can be retrieved with:

DC:=GetDC(WindowHandle);

//Now you need to create a DC for the bitmap.

BitmapDC:=CreateCompatibleDC(DC);

//Next select the bitmap into the BitmapDC.

SelectObject(BitmapDC,BitmapHandle);

//And blit the bitmap to the "canvas" of the window.

BitBlt(DC,XDest,YDest,BitmapWidth,BitmapHeight,BitmapDC,BitmapWidth,BitmapHeight,SRCCOPY);

//That''s it, note that this is not transparent bitmap blitting.

If you have any questions, feel free to ask,

Thijs Jellema

to_thijs@hotmail.com
Thanks!
Hey! This didn''t work either! As soon as i removed the reasource file from the build, the run fails with

"The specified image file did not contain a reasource section."

There must be a way to load the file at runtime! Anybody?
zTn


PS Working in MS Visual Studio 6
Try this:

HBITMAP hBmp = (HBITMAP)LoadImage(NULL, "image.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
I think that is exactly what i am using:


//
BITMAP bm;
HBITMAP hbmBall;
HDC hdcMemory, hdcWindow;

//Load Image File
hbmBall = LoadBitmap(phInstance, "Intro.bmp");
//
if(!hbmBall)Process_Error("void zwindow::InitIntroImage", "Intro.bmp");


//Aquire Window Content & Memory space
hdcWindow = GetDC(hwnd);
hdcMemory = CreateCompatibleDC(hdcWindow);
SelectObject(hdcMemory, hbmBall);
GetObject(hbmBall, sizeof(bm), &bm);

//Draw Image
BitBlt(hdcWindow, 0, 0, bm.bmWidth, bm.bmHeight, hdcMemory, 0, 0, SRCCOPY);

//
DeleteDC(hdcMemory);
if (!ReleaseDC(hwnd, hdcWindow)) Process_Error("zDescWin::Draw() ReleaseDC() Failure");
//




Is there some setting in VC that i''m not aware of maybe?
zTn

Oh, i see it now. My bad.


thanks to both thijsjellema and Advanced Bug,
zTn

This topic is closed to new replies.

Advertisement