SOS
Posted: Sat Jun 01, 2013 8:32 am
Je lis un fichier, jpeg ou autre avec gflLoadBitmap. Ici pas de problème. Ensuite j'appelle GetDiBits une première fois pour diverses initialisations. J'appelle une nouvelle fois cette fonction et elle me renvoie systématiquement 0. J'utilise GetDiBits car avec GFL je ne récupère qu'une image en 24 bits et je la voudrais en 32 bits. Devrais-je utiliser gflConvertBitmapIntoDIB pultôt que gflConvertBitmapIntoDDB ? Est-ce la source de mon problème ?
J'implore votre aide.
D'avance merci.
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) ;
}