cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 2014
-
4 mai 2009 à 13:33
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 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);
// 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;
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 4 mai 2009 à 14:37
Merci Cirec,
je vais jeter un oeil!
Après réflexion, je n' ai pas besoin de transparence dans mon cas ...
Ce que je veux c' est que ça marche avec tous les formats qui peuvent être dans le TGraphic.
Je vais généraliser la question :
je désire copier une partie d' une image (définie par un TRect) contenue dans un TGraphic vers un TCanvas.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 4 mai 2009 à 15:36
Bem justement, c' est ce que je fais pour l' instant (regarde dans le "else") :
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);
De plus, j' ai un autre problème pour les png sous Delphi 2009 :
en DesignTime, Picture.Graphic <> Nil fonctionne, mais en run-time non ...