[WinAPI] fonctions graphiques

Résolu
riked Messages postés 2 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 29 juillet 2009 - 29 juil. 2009 à 01:05
riked Messages postés 2 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 29 juillet 2009 - 29 juil. 2009 à 19:07
Bonjour (ou bonsoir),

Je suis nouveau sur cppfrance et je vient vous exposer mon problème.

Je fait actuellement un programme qui à pour but d'afficher plusieurs bitmaps constamment en mouvement et ayant à la fois une couleur transparente (ici: le noir) et à la fois être semi-transparente.Pour gérer la transparence j'ai donc créer une fonction qui permet de rendre les couleurs d'une image transparente par rapport au DC courant:

HBITMAP CouleurTransparente(HDC Src,HDC Dest,int Dx,int Dy,int Sx,int Sy,COLORREF couleur)
{

 for (int x = 0;x < Sx ;x++)
 {
  for (int y = 0;y < Sy;y++)
  {
  COLORREF clr = GetPixel(Src,x,y);
  COLORREF tp = GetPixel(Dest,Dx+x,Dy+y);
  if (clr == couleur) SetPixel(Src,x,y,tp);
  }
 }

 return CreateCompatibleBitmap(Src,cx,cy);
}


Seulement, cette fonction est un peu lente et je doit l'utiliser une dizaine de fois par seconde ce qui ralentie énormément le programme.

Je voudrais donc que quelqu'un puisse me donner une fonction d'affichage rapide qui prend en compte l'affichage d'une image avec au moins une couleur transparente comme la fonction "TransparentBlt" ET l'affichage de l'image en semi-transparence comme le fait la fonction "AlphaBlend".

Merci d'avance :)

2 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
29 juil. 2009 à 13:20
Bienvenue,

Regarde peut être ce code de vecchio56.

Ensuite, pour les performances, il est hautement connu que GetPixel et SetPixel ne sont pas du tout à utiliser quand on travail sur des bitmaps entières. Regarde ce thread.
3
riked Messages postés 2 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 29 juillet 2009
29 juil. 2009 à 19:07
J'ai finalement décidé d'utiliser "GetDIBits" et "SetDIBits" pour la couleur de transparence comme indiqué sur le lien que tu ma donné.Merci de cette réponse :)
0
Rejoignez-nous