| 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;
 
- }
 
 
  |