Copie d' une partie d' un TGraphic vers un Canvas avec option de transparence

Résolu
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 4 mai 2009 à 13:33
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 4 mai 2009 à 17:14
Bonjour à tous,

je voudrais savoir s' il existe une méthode plus performante pour copier une partie d' un TGraphic vers un Canvas.

Pour l' instant, je passe par un TBitmap que je crée dynamiquement:
          if (MaxWidth <> aBgPicture.Picture.Width) or ((MaxHeight <> aBgPicture.Picture.Height))
          then begin
            // Copy part of the image :
            TmpBmp := TBitmap.Create;

            // Try converting into bitmap
            TmpBmp.Width  := MaxWidth;
            TmpBmp.Height := MaxHeight;
            TmpBmp.PixelFormat := pf32bit;
            aBgPicture.Picture.Graphic.Transparent := false;
            TmpBmp.Canvas.Draw(0, 0,  aBgPicture.Picture.Graphic);
            TmpBmp.Transparent := aBgPicture.Transparent;
            aCanvas.Draw(x, y,  TmpBmp);
            TmpBmp.Free;
          end
          else
            aCanvas.Draw(x, y,  aBgPicture.Picture.Graphic);

Merci,
Maurício

11 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
4 mai 2009 à 16:43
ReBonjour,

je vais vous donner la fonction que je viens de finaliser et qui marche très bien et pour tous les types d' images:

procedure DrawGraphic(onCanvas: TCanvas; x, y: Integer; Graphic: TGraphic; SrcRect: TRect; Transparent: Boolean);
var TmpBmp: TBitmap;
begin
  try
    TmpBmp := TBitmap.Create;
    TmpBmp.Width  := SrcRect.Right - SrcRect.Left;
    TmpBmp.Height := SrcRect.Bottom - SrcRect.Top;
    TmpBmp.PixelFormat := pf32bit;

    // Copy actual Canvas to the Bitmap.Canvas for transparent feature :
    if Transparent
    then begin
      TmpBmp.Canvas.CopyRect(classes.Rect(0, 0, TmpBmp.Width, TmpBmp.Height),  // Destination Rect
                              onCanvas, classes.Rect(x, y, x + TmpBmp.Width, y + TmpBmp.Height));
    end;

    TmpBmp.Canvas.Draw(0, 0,  Graphic);
    onCanvas.Draw(x, y,  TmpBmp);
  finally
    TmpBmp.Free;
  end;
end;
3
Rejoignez-nous