I'm creating a program, and I need to load a PNG image from the resource files. The goal is simple, pass a Bitmap object by reference to a function, which assigns the PNG from the stream to it, and returns. Because it's by reference, the origial should be affected.
Using the tutorial over on CodeProject, I came up with the following code:
And in my WM_PAINT:Code:int loadResource(Bitmap& image,LPCTSTR name,LPCTSTR type,HINSTANCE hinst=GetModuleHandle(0)){ HRSRC hRes=FindResource(hinst, name, type); if(!hRes) return -1; unsigned long imgSize=SizeofResource(hinst, hRes); if(!imgSize) return -1; const void* pResData=LockResource(LoadResource(hinst, hRes)); if(!pResData) return -1; HGLOBAL buffer=GlobalAlloc(GMEM_MOVEABLE, imgSize); if(buffer){ void* pBuffer=GlobalLock(buffer); if(pBuffer){ CopyMemory(pBuffer, pResData, imgSize); IStream* pStream=NULL; if(CreateStreamOnHGlobal(buffer, false, &pStream)==S_OK){ image.FromStream(pStream); int status=image.GetLastStatus(); if(status==Ok){ pStream->Release(); GlobalUnlock(buffer); GlobalFree(buffer); return status; } else{ pStream->Release(); GlobalUnlock(buffer); GlobalFree(buffer); return status; } } } } return -1; }
The problem is that the original Bitmap isn't updated properly. It's initialized, and keeps that value, even after loadResource() runs.Code:/*Standard stuff*/ HINSTANCE hinst=GetModuleHandle(0); //This one works, but in the release, I don't want the image outside of the EXE //Bitmap image(L"temp.png"); Bitmap image(30,44); loadResource(image, MAKEINTRESOURCE(IDB_TEMP), RT_RCDATA); Graphics graphics(hdc); TextureBrush brush(&image,WrapModeTile); graphics.FillRectangle(&brush, Rect(0, 0, 60, 88)); /*Standard stuff*/
Can anybody help me out with this?


Reply With Quote

Bookmarks