Impossible d'afficher un bitmap transparent dans un DC memoire...

Impossible d'afficher un bitmap transparent dans un DC memoire... - C++ - Programmation

Marsh Posté le 23-06-2003 à 13:50:54    

Et oui, alors qu'avec le code ci dessous j'arrive a afficher une image transparente (LPPICTURE, interface IPICTURE) dans le contexte graphique courant (hdc), si je cree un DC memoire, l'image s'affiche bien, mais elle n'est plus transparente.
Quelqu'un a t'il une idee a me soumettre pour resoudre le pb ????
 

Code :
  1. RECT* Image::show( HDC hdc, int x = -1, int y = -1, int w = -1, int h = -1) {
  2. OLE_XSIZE_HIMETRIC width;
  3. OLE_YSIZE_HIMETRIC height;
  4. int l_x, l_y, l_w, l_h;
  5. LPPICTURE  picture = getPicture();
  6. //on cree un DC compatible bidon
  7. HDC memDC = CreateCompatibleDC( hdc ) ;
  8. picture->get_Width( &width );
  9. picture->get_Height( &height );
  10. CSize sz( width, height );
  11. CDC *dc = new CDC();
  12. dc->Attach(memDC);
  13. dc->HIMETRICtoDP( &sz );
  14. HBITMAP hBmp = CreateCompatibleBitmap(hdc, width, height);
  15. HBITMAP oldBmp = (HBITMAP)SelectObject(memDC, hBmp);
  16. //La, ca fonctionne, mon image s'affiche en transparence
  17. picture->Render( hdc,
  18.                   0, 0,  // dest loc
  19.                   sz.cx, sz.cy,   // destination size
  20.                   0, height,  // source loc
  21.                   width, -height, // source size
  22.                   NULL );
  23. //La, elle s'affiche, mais avec du noir a la place de la transparence...
  24. picture->Render( memDC,
  25.                   0, 0,  // dest loc
  26.                   sz.cx, sz.cy,   // destination size
  27.                   0, height,  // source loc
  28.                   width, -height, // source size
  29.                   NULL );
  30. // on copie depuis le DC memoire dans le DC courant
  31. BitBlt( hdc, 0, 0, width, height, memDC, 0, 0, SRCCOPY ) ;


Message édité par dea le 23-06-2003 à 14:11:36
Reply

Marsh Posté le 23-06-2003 à 13:50:54   

Reply

Marsh Posté le 23-06-2003 à 17:50:20    

Je ne suis pas sûr, mais une image trasnparente en mémoire, je crois que ça n'a pas de sens. AMHA, tout se joue au moment du blit.
Utilise TransparentBlt au lieu de BitBlt, et ça devrait aller mieux :
http://msdn.microsoft.com/library/ [...] s_2y9g.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed