2010-01-20 6 views
1

J'ai inséré des bitmaps dans CImageList dans une fonction et j'ai dû modifier certaines images plus tard dans une autre fonction. Mais je suis incapable d'extraire le CBitmap. Le code va quelque chose comme ceci:Récupération de CBitmap avec CImageList

CBitmap GetIndividualBitmap(CImageList oImgList, int nBmpNo) 
{ 
    IMAGEINFO imgInfo; 
    imagelist.GetImageInfo(index,imgInfo); 
    CBitmap bmp; 
    bmp.FromHandle(imgInfo.hbmImage); 
    return bmp; 
} 

Cependant tout ce que je reçois est un écran noir. Quelqu'un pourrait-il me dire où je me trompe?

Répondre

1

Une recherche Google sur "CImageList Get Bitmap" a produit http://www.codeguru.com/forum/archive/index.php/t-257564.html et http://www.codeproject.com/KB/graphics/getimagefromlist.aspx et vous semblez avoir exactement ce que vous cherchez?

+0

je sais. Mais j'essaie de savoir ce qui ne va pas avec mon code. –

+1

Selon le premier lien, le HBITMAP retourné est le bitmap d'origine entier - vous devez sélectionner la partie de celui-ci qui est l'image que vous voulez, qui est dans le imgInfo.rcImage; Je ne peux pas vous dire exactement pourquoi votre bitmap actuel est tout noir lorsqu'il est rendu - mais je vais deviner que c'est son bitmap compatible avec l'écran. D'où le code dans les deux exemples de lien de la façon de copier uniquement la section dont vous avez besoin dans un bitmap compatible. – Ruddy

6

Ok il y a un certain nombre d'erreurs dans votre code

1) Vous passez la liste d'images par objet ce qui signifie qu'il le copier à travers. Le transmettre par référence est un bien meilleur plan.
2) Vous ne passez pas un pointeur vers la structure IMAGEINFO dans le GetImageInfo.
3) Vous vous méprenez sur le fonctionnement de "FromHandle". FromHandle est une fonction statique qui renvoie un pointeur vers un bitmap. Dans votre code, vous appelez la fonction, puis en ignorant le CBitmap * retourné et en retournant une copie de votre objet nouvellement construit (c'est-à-dire qu'il ne contient rien) ce qui entraîne votre écran noir.

tous ceux en prenant compte que vous devez avoir un code qui ressemble à ceci:

CBitmap* GetIndividualBitmap(CImageList& oImgList, int nBmpNo) 
{ 
    IMAGEINFO imgInfo; 
    oImgList.GetImageInfo(nBmpNo, &imgInfo); 
    return CBitmap::FromHandle(imgInfo.hbmImage); 
} 
+1

Tout est très vrai. Cependant, je crois que vous devrez toujours aller chercher la bonne partie du bitmap comme indiqué dans mes commentaires ci-dessus. – Ruddy

Questions connexes