J'implore votre aide.
D'avance merci.
Code: Select all
LPIMAGEINFOS LoadImageFromFile(LPSTR __lpszFileName)
{
	GFL_LOAD_PARAMS			_LoadParams ;
	IMAGEINFOS				_ImageInfos, *_lpImageInfos ;
	HBITMAP					_hBitmap ;
	BITMAP					_BmpWork ;
	HDC						_hDC ;
	LPBYTE					_lpImageBits ;
	memset(&_ImageInfos,0,sizeof(IMAGEINFOS)) ;
	gflGetDefaultLoadParams(&_LoadParams);
	_LoadParams.ColorModel = GFL_ARGB ;
	_LoadParams.Origin = GFL_TOP_LEFT ;
	_LoadParams.Flags = GFL_LOAD_SKIP_ALPHA ;
	_LoadParams.DefaultAlpha = 255 ;
	_LoadParams.LinePadding = 4 ;
	if(gflLoadBitmap(__lpszFileName,&_ImageInfos.lpgflBitmap,&_LoadParams,&_ImageInfos.FileInfos))
		return (NULL) ;
	gflConvertBitmapIntoDDB(_ImageInfos.lpgflBitmap,&_hBitmap) ;
	if(_hBitmap)
	{
		ZeroMemory(&_BmpWork,sizeof(BITMAP));
		GetObject(_hBitmap,sizeof(BITMAP),&_BmpWork) ;
		_hDC = GetDC(NULL) ;
		if(_hDC)
		{
			_ImageInfos.SrcBitmapInfo.biSize = sizeof(BITMAPINFO) ;
			if(GetDIBits(_hDC,_hBitmap,0,_BmpWork.bmHeight,NULL,(LPBITMAPINFO) &_ImageInfos.SrcBitmapInfo,DIB_RGB_COLORS))
			{
				_lpImageInfos = (LPIMAGEINFOS) VirtualAlloc(NULL,sizeof(IMAGEINFOS),MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE) ;
				if(_lpImageInfos)
				{
					_lpImageBits = (LPBYTE) VirtualAlloc(NULL,_ImageInfos.SrcBitmapInfo.biSize,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE) ;
					if(_lpImageBits)
					{
						_ImageInfos.SrcBitmapInfo.biSize = sizeof(BITMAPINFOHEADER) ;
						if(!GetDIBits(_hDC,_hBitmap,0,_BmpWork.bmHeight,_lpImageBits,(LPBITMAPINFO) &_ImageInfos.SrcBitmapInfo,DIB_RGB_COLORS))
						{
							ReleaseDC(NULL,_hDC) ; // J'atteris toujours ICI !
							VirtualFree(_lpImageBits,0,MEM_RELEASE) ;
							VirtualFree(_lpImageInfos,0,MEM_RELEASE) ;
						}
						else
						{
							DeleteObject(_hBitmap) ;
							memcpy(_lpImageInfos,&_ImageInfos,sizeof(IMAGEINFOS)) ;
							memcpy(&_lpImageInfos->gflBitmap,_ImageInfos.lpgflBitmap,sizeof(GFL_BITMAP)) ;
							_lpImageInfos->lpImageBits = _lpImageBits ;
							gflFreeFileInformation(&_lpImageInfos->FileInfos) ;
							gflFreeBitmapData(_lpImageInfos->lpgflBitmap) ;
							ReleaseDC(NULL,_hDC) ;
							_lpImageInfos->lpgflBitmap = NULL ;
							return (_lpImageInfos) ;
						}
					}
					else
					{
						ReleaseDC(NULL,_hDC) ;
						VirtualFree(_lpImageInfos,0,MEM_RELEASE) ;
					}
				}
				else
				{
					ReleaseDC(NULL,_hDC) ;
				}
			}
			else
			{
				ReleaseDC(NULL,_hDC) ;
			}
		}
		DeleteObject(_hBitmap) ;
	}
	gflFreeFileInformation(&_ImageInfos.FileInfos) ;
	gflFreeBitmapData(_ImageInfos.lpgflBitmap) ;
	return (NULL) ;
}