#include <comdef.h>
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#include "GdiPlus.h"
using namespace Gdiplus;
#endif
#pragma comment(lib,"gdiplus.lib")
HBITMAP CreateBitmapFromImage( LPCTSTR pFileName, DWORD* pWidth, DWORD* pHeight, void** pData )
{
HDC hMemDC;
HBITMAP hBitmap;
GdiplusStartupInput m_gdiplusStartupInput;
ULONG_PTR m_pGdiToken;
GdiplusStartup( &m_pGdiToken, &m_gdiplusStartupInput, NULL );
{
hMemDC = CreateCompatibleDC( NULL );
Image image( pFileName, FALSE );
*pWidth = image.GetWidth();
*pHeight = image.GetHeight();
BITMAPINFO bi;
ZeroMemory( &bi, sizeof(BITMAPINFO) );
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biBitCount = 32;
bi.bmiHeader.biWidth = *pWidth;
bi.bmiHeader.biHeight = *pHeight;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biPlanes = 1;
hBitmap = CreateDIBSection( hMemDC, &bi, DIB_RGB_COLORS,
pData, 0, 0 );
SelectObject( hMemDC, hBitmap );
RECT rect = { 0, 0, *pWidth, *pHeight };
FillRect( hMemDC, &rect, (HBRUSH)GetStockObject(WHITE_BRUSH) );
Graphics graphics( hMemDC );
graphics.DrawImage( &image, 0, 0, *pWidth, *pHeight );
}
DeleteDC( hMemDC );
GdiplusShutdown( m_pGdiToken );
return hBitmap;
}