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