Salut ,
j'ais gros pb lorsque j'essaye d'afficher un bitmap à l'écran :
la fonction CreateDIBitmap(...) qui créé mon image ne fonctionne
pas toujours.
Le premier affichage marche correctement mais quand j'ouvre une autre fenêtre en parallèle et que j'essaye d'afficher la même image cela ne
marche plus ( le CreateDIBitmap ne me créé plus le bitmap )
ci-dessous mon code
si qq un pouvais m'aider
il me sauverait la vie
merci d'avance pour votre aide
a+
HANDLE hDIB ; // variables utilisées pour la
BITMAPINFOHEADER * infoHeader ; // création du bitmap affiché
BITMAPINFO * infoDib ;
/**
* Pointeur sur l'image BMP affiché à l'écran.
*/
Graphics::TBitmap * imgDisplayed ;
hDIB = GlobalAlloc(GMEM_MOVEABLE, sizeof(BITMAPINFO) + largeur * img->getYImg() ) ;
infoDib = (LPBITMAPINFO) GlobalLock(hDIB) ;
infoHeader = (LPBITMAPINFOHEADER) infoDib ;
// Construction de l'info header du bmp qui sera affiché
infoHeader->biSize = sizeof(BITMAPINFOHEADER) ;
infoHeader->biWidth = largeur ;
infoHeader->biHeight = - img->getYImg() ;
infoHeader->biPlanes = 1 ;
infoHeader->biBitCount = bpp ;
infoHeader->biCompression = 0 ;
infoHeader->biSizeImage = 0 ;
infoHeader->biXPelsPerMeter = 0 ;
infoHeader->biYPelsPerMeter = 0 ;
infoHeader->biClrUsed = 0 ;
infoHeader->biClrImportant = 0 ;
infoDib->bmiHeader = *infoHeader ;
// Construction de la nouvelle palette
int center = static_cast<int> (img->getCenterGreyLevel()[ currentSlice ]) ;
int width = static_cast<int> (img->getWidthGreyLevel()[ currentSlice ]) ;
int ptaille1 = center - width / 2 ;
int ptaille2 = center + width / 2 ;
for ( int i = 0 ; i <= ptaille1 ; i++ )
{
infoDib->bmiColors[i].rgbBlue = infoDib->bmiColors[i].rgbGreen = infoDib->bmiColors[i].rgbRed = (BYTE) 0 ;
infoDib->bmiColors[i].rgbReserved = (BYTE) 0 ;
}
for ( int i = ptaille1 + 1 ; i < ptaille2 ; i++ )
{
infoDib->bmiColors[i].rgbBlue = infoDib->bmiColors[i].rgbGreen = infoDib->bmiColors[i].rgbRed = (BYTE)(255*(i - ptaille1 )/ width );
infoDib->bmiColors[i].rgbReserved = (BYTE) 0 ;
}
for (int i = ptaille2 ; i < 256 ; i++ )
{
infoDib->bmiColors[i].rgbBlue = infoDib->bmiColors[i].rgbGreen = infoDib->bmiColors[i].rgbRed = (BYTE) 255 ;
infoDib->bmiColors[i].rgbReserved = (BYTE) 0;
}
// Destruction de l'ancien handle de bitmap
if ( imgDisplayed != NULL )
{
HBITMAP hbmp = imgDisplayed->ReleaseHandle() ;
DeleteObject( hbmp ) ;
delete imgDisplayed ;
}
// Création du nouveau handle de bitmap
imgDisplayed = new Graphics::TBitmap ;
// Chargement de l'image
imgDisplayed->Handle = CreateDIBitmap( GetDC( owner->Handle ) , infoHeader , CBM_INIT , img->getImgData()[ currentSlice ] , infoDib , DIB_RGB_COLORS ) ;