cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 2018
-
25 mai 2013 à 12:14
korgis
Messages postés420Date d'inscriptionsamedi 17 mai 2003StatutMembreDernière intervention 6 mai 2019
-
25 mai 2013 à 17:57
Re
Dans mon composant descendant de TWinControl,j'ai besoin de garder en mémoire un Bitmap de l'ensemble du dessin qui sera sauvegardé en tant qu'élément d'une Liste de pages (ça sera un sous-composant).
Ce dessin sera destiné également à plusieurs usages :
1. Affichage avec le bon dimentionnement, 2. Sauvegarde fichier de l'original dans son format maximum
3. Création de vignettes
4. Aperçus avant impressions
Le dessin de l'original ne pose pas de problème spécifique même s'il s'agit de calculs multiples en arithmétique...
mais je me pose des questions sur la méthode d'affichage selon les propriétés de dimensions et Zoom demandé
Au départ, je me suis dit:
Bon je dessine dans un bitmap aux dimensions maximum pour garder une bonne précision
Puis je définis un TRect d'affichage qui calulera le ratio en fonction de l'affichage demandé
Constructor TQuest.Create(AOwner : TComponent);
Begin
inherited Create(AOwner);
inherited Width := 200;
inherited Height:= 300;
...
_PageCanvas := TCanvas.Create;
_RectScr := Rect(0,0,_DimScrBmp.X,_DimScrBmp.Y);
_RectDest := f_SizeToRectZoom(FZoomVal,FZoomState);
...
BmpPage := TBitmap.Create;
With BmpPage do // Original
begin
Width := _DimScrBmp.Right;
Height:= _DimScrBmp.Bottom;
end;
Mes rectangles RectScr et RectDest sont définis et commencent à (0,0,...) et je les définis en fonction des paramètres. l'origine du Point Supérieur gauche de Mon Rect de destination sont également calculés dans paint:
Procedure TQuest.Paint;
Begin
inherited paint;
if Assigned(Parent) then
begin
_RectDest := Parent.BoundsRect;
_O := f_OrgRect(_RectScr,_RectDest,FZoomVal,FZoomState);
end else
begin
_RectDest := Parent.BoundsRect;
_O := Point(0,0);
mais c'est là que je me pose des questions car je n'arrive pas à centrer mon dessin à l'échelle:
1. Est-il préférable d'utiliser CopyRect en travaillant sur les Rectangles d'origine et de Destination?
cs_Jean_Jean
Messages postés615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 25 mai 2013 à 17:12
Merci korgis
Oui, mais justement je voulais éviter de le faire en ne me basant que sur des calculs de Rect plus rapide à mon sens que des créations et destructions!
Bien que ça ne soit pas vraiment un logiciel demandant un temps de réaction très rapide...
En fait, j'ai créé un Canvas que je voulais affecter à mon dessin à partir duquel je pourrai charger mon Bitmap pour ses différentes utilisations.
Or en faisant des essais, je me suis rendu compte que dans Paint, quand j'écris :
Canvas.Draw(...), ça n'est pas le Canvas que j'ai créé sur lequel il dessine mais le canvas du bitmap d'une procédure de Dessin.
Donc finalement, comment affecter un canvas créé en tant que TCanvas à un Bitmap qui a déjà un Canvas.
Pourquoi faire simple quand on peut faire compliqué?! Je regarde du côté des méthodes Copy...