Merci à vous deux.
Le code que vous fournissez fonctionne presque J'ai du l'adapter pour créer un masque à partir d'un fichier couleur représentant un sprite.
Voici mon code (en gras les valeurs que j'ai adaptée) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| Procedure TForm1.CreateMsk(bm_Sprite, bm_Mask : TBitmap);
var
x,y : integer;
cl : TColor;
begin
With bm_Mask do
begin
width := bm_Sprite.width;
height := bm_Sprite.height;
pixelFormat := pf1bit; //<- 1 bit / pixel
canvas.Brush.Color := clWhite; //<- blanc
canvas.FillRect(canvas.ClipRect);
end;
for y := 0 to bm_Sprite.Height-1 do
begin
for x := 0 to bm_Sprite.Width-1 do
begin
cl := bm_Sprite.canvas.pixels[x,y];
if cl = clWhite then bm_Mask.canvas.pixels[x,y] := clBlack;
end;
end;
end; |
Je peux ensuite utiliser le masque ainsi créé avec la fonction GDI PlgBlt :
PlgBlt(img_Fond.Canvas.Handle, TabPoint, bm_Sprite.Canvas.Handle, 0,0 , Largeur, Hauteur, bm_Mask.Handle,0,0);
ou encore avec MaskBlt :
MaskBlt(img_Fond.Canvas.Handle, 10, 10, Largeur, Hauteur, bm_Sprite.Canvas.Handle, 0,0, bm_Mask.Handle, 0, 0, MAKEROP4(SRCCOPY, $00AA0029));
Tout fonctionne à merveille.
Encore merci à vous
Partager