| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #pragma once
- class CGdiPlusBitmap
- {
- public:
- Gdiplus::Bitmap* m_pBitmap;
- public:
- CGdiPlusBitmap() { m_pBitmap = NULL; }
- CGdiPlusBitmap(LPCWSTR pFile) { m_pBitmap = NULL; Load(pFile); }
- virtual ~CGdiPlusBitmap() { Empty(); }
- void Empty() { delete m_pBitmap; m_pBitmap = NULL; }
- bool Load(LPCWSTR pFile)
- {
- Empty();
- m_pBitmap = Gdiplus::Bitmap::FromFile(pFile);
- return m_pBitmap->GetLastStatus() == Gdiplus::Ok;
- }
- bool Loads(LPCWSTR pFile)
- {
- Empty();
- m_pBitmap = Gdiplus::Bitmap::FromFile(pFile);
- return m_pBitmap->GetLastStatus() == Gdiplus::Ok;
- }
- operator Gdiplus::Bitmap*() const { return m_pBitmap; }
- };
- class CGdiPlusBitmapResource : public CGdiPlusBitmap
- {
- protected:
- HGLOBAL m_hBuffer;
- public:
- CGdiPlusBitmapResource() { m_hBuffer = NULL; }
- CGdiPlusBitmapResource(LPCTSTR pName, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL)
- { m_hBuffer = NULL; Load(pName, pType, hInst); }
- CGdiPlusBitmapResource(UINT id, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL)
- { m_hBuffer = NULL; Load(id, pType, hInst); }
- CGdiPlusBitmapResource(UINT id, UINT type, HMODULE hInst = NULL)
- { m_hBuffer = NULL; Load(id, type, hInst); }
- virtual ~CGdiPlusBitmapResource() { Empty(); }
- void Empty();
- bool Load(LPCTSTR pName, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL);
- bool Load(UINT id, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL)
- { return Load(MAKEINTRESOURCE(id), pType, hInst); }
- bool Load(UINT id, UINT type, HMODULE hInst = NULL)
- { return Load(MAKEINTRESOURCE(id), MAKEINTRESOURCE(type), hInst); }
- bool LoadRaw(unsigned char* bitmapData, int imageSize)
- {
- /*bool ret = false;
- CString path;
- wchar_t wchPath[MAX_PATH];
- if (GetTempPathW(MAX_PATH, wchPath))
- {
- path = wchPath;
- path += "qrcode.bmp";
- }
- FILE* f = _wfopen(path.GetBuffer(MAX_PATH), _T("wb"));
- if (f != NULL)
- {
- fwrite(bitmapData, imageSize, 1, f);
- fclose(f);
- }
- m_pBitmap = Gdiplus::Bitmap::FromFile(path);
- if (m_pBitmap)
- {
- Status s = m_pBitmap->GetLastStatus();
- if (m_pBitmap->GetLastStatus() != Gdiplus::Ok)
- {
- delete m_pBitmap;
- m_pBitmap = NULL;
- }
- else
- {
- ret = true;
- }
- }
- ::DeleteFile(path);*/
- Empty();
- m_hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
- if (m_hBuffer)
- {
- void* pBuffer = ::GlobalLock(m_hBuffer);
- if (pBuffer)
- {
- CopyMemory(pBuffer, bitmapData, imageSize);
- IStream* pStream = NULL;
- if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK)
- {
- m_pBitmap = Gdiplus::Bitmap:: FromStream(pStream);
- pStream->Release();
- if (m_pBitmap)
- {
- if (m_pBitmap->GetLastStatus() == Gdiplus::Ok)
- return true;
- delete m_pBitmap;
- m_pBitmap = NULL;
- }
- }
- ::GlobalUnlock(m_hBuffer);
- }
- ::GlobalFree(m_hBuffer);
- m_hBuffer = NULL;
- }
- return false;
- //return ret;
- }
- };
- inline
- void CGdiPlusBitmapResource::Empty()
- {
- CGdiPlusBitmap::Empty();
- if (m_hBuffer)
- {
- ::GlobalUnlock(m_hBuffer);
- ::GlobalFree(m_hBuffer);
- m_hBuffer = NULL;
- }
- }
- inline
- bool CGdiPlusBitmapResource::Load(LPCTSTR pName, LPCTSTR pType, HMODULE hInst)
- {
- Empty();
- HRSRC hResource = ::FindResource(hInst, pName, pType);
- if (!hResource)
- return false;
-
- DWORD imageSize = ::SizeofResource(hInst, hResource);
- if (!imageSize)
- return false;
- const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
- if (!pResourceData)
- return false;
- m_hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
- if (m_hBuffer)
- {
- void* pBuffer = ::GlobalLock(m_hBuffer);
- if (pBuffer)
- {
- CopyMemory(pBuffer, pResourceData, imageSize);
- IStream* pStream = NULL;
- if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK)
- {
- m_pBitmap = Gdiplus::Bitmap:: FromStream(pStream);
- pStream->Release();
- if (m_pBitmap)
- {
- if (m_pBitmap->GetLastStatus() == Gdiplus::Ok)
- return true;
- delete m_pBitmap;
- m_pBitmap = NULL;
- }
- }
- ::GlobalUnlock(m_hBuffer);
- }
- ::GlobalFree(m_hBuffer);
- m_hBuffer = NULL;
- }
- return false;
- }
|