Dessiner un Bitmap transparent sur un Canvas



Sur les pages Web, il est courant de rencontrer des images avec des zones transparentes, telles que les GIF. En revanche, sous Windows, le dessin des zones de transparence n'est pas aussi facile que de déposer un Bitmap sur une fiche. Certes, on peut utiliser un composant TImage, mais question rapidité, ce n'est pas rééllement l'idéal. En effet, pour les jeux par exemple, il est hors de question de créér autant de TImage que de sprites affichés à l'écran, il faut impérativement dessiner sur un TCanvas.

Heureusement, il existe une solution relativement simple: utiliser un masque. Il suffit d'avoir en mémoire l'image sur fond noir, et un masque, qui correspond au noircissement des zones colorées, et à la mise en blanc des zones transparentes. Pour créer facilement un masque, je vous recommande un outil tel que Paint Shop Pro dont on trouve la démo sur le CD de la plupart des magazines, qui permet de travailer facilement sur les zones de couleurs.

L'image sur fond noir...

L'image sur fond noir...



... et le masque sur fond blanc

... et le masque sur fond blanc




Sans vous en rendre compte, vous venez déjà de faire le plus dur... Il ne vous reste plus qu'à dessiner le masque en mode SrcAnd, puis l'image en mode SrcPaint pour avoir l'image affichée en transparence sur n'importe quel type de fond, uni ou pas, tel que celui-ci:

L'image de fond

L'image de fond



Ca vous paraît compliqué ? Détrompez-vous, 4 lignes de code suffisent pour dessiner l'image en transparence:

Dessin de l'image en transparence

procedure TForm1.DrawImage;
begin
  Canvas.CopyMode := cmSrcAnd;
  Canvas.Draw(XPos, YPos, Mask);
  Canvas.CopyMode := cmSrcPaint;
  Canvas.Draw(XPos, YPos, Bitmap);
end;



Et voilà, tout est fait, il ne vous reste plus qu'à admirer le résultat:

Le résultat

Le résultat



Si vous voulez, vous pouvez télécharger les Sources de l'exemple


3 requête(s) SQL executée(s) en 0.001 Secs - Temps total de génération de la page : 0.007 Secs