When you use StretchDIBits you must give it the image bits. Sometimes you need to transform this image bits to a bitmap, that is the goal of this function.
The function needs this structure :
typedef struct tagIMAGEINFOS
{
	LPBYTE					lpImageBits ;
	HBITMAP					hImgBitmap ;
	BITMAPINFO				BitmapInfo ;
	char					Dummy[(sizeof(BITMAPV5HEADER ) - sizeof(BITMAPINFOHEADER))] ;
	char					szImageFile[MAX_PATH + 4] ;
	BYTE					FreeSpace[256] ;
} IMAGEINFOS, *LPIMAGEINFOS ;
I hope this will help you playing with images.
HBITMAP ImageToBitmap(LPIMAGEINFOS __lpImage)
{
	HDC				_hDC, _hDCMem1 ;
	HBITMAP			_hBmp1, _hBmp1Old ;
	_hBmp1 = NULL ;
	if(!__lpImage)	return (NULL) ;
	_hDC = GetDC(NULL) ;
	if(_hDC)
	{
		_hDCMem1 = CreateCompatibleDC(_hDC) ;
		if(_hDCMem1)
		{
			SetStretchBltMode(_hDCMem1,COLORONCOLOR) ;
			_hBmp1 = CreateCompatibleBitmap(_hDC,__lpImage->BitmapInfo.bmiHeader.biWidth,__lpImage->BitmapInfo.bmiHeader.biHeight) ;
			if(_hBmp1)
			{
				_hBmp1Old = SelectObject(_hDCMem1,_hBmp1) ;
				if(_hBmp1Old)
				{
					if(StretchDIBits(_hDCMem1,0,0,__lpImage->BitmapInfo.bmiHeader.biWidth,__lpImage->BitmapInfo.bmiHeader.biHeight,0,0,__lpImage->BitmapInfo.bmiHeader.biWidth,__lpImage->BitmapInfo.bmiHeader.biHeight,__lpImage->lpImageBits,&__lpImage->BitmapInfo,DIB_RGB_COLORS,SRCCOPY))
					{
						SelectObject(_hDCMem1,_hBmp1Old) ;
						DeleteDC(_hDCMem1) ;
						ReleaseDC(NULL,_hDC) ;
						return (_hBmp1) ;
					}
					SelectObject(_hDCMem1,_hBmp1Old) ;
				}
				DeleteObject(_hBmp1) ;
			}
			DeleteDC(_hDCMem1) ;
		}
		ReleaseDC(NULL,_hDC) ;
	}
	return (0) ;
}