{--------------------------------------------------------------------------------------------------- 1. Calcule les Facteurs de proportionnalité RapSrcW et RapSrcH entre deux images externes. 2. Calcule les Facteurs de proportionnalité RapImgW et RapImgH entre deux images externes dont l'une sera chargée sans modification dans une TImage fixe (c'est à dire dont la taille est ajustée automatiquement au Contener Image) et l'autre retravaillée avant son affichage. 3. La fonction fournit également les dimensions d'origine des images 1 et 2 externes Remarque : La propriété Autosize du Timage = false (dimensions fixes) La propriété Stretch du TImage = True (pour adapter les dimensions de l'image externe au TImage. Entrées : aImg : Nom du Contener TImage (composant interne Delphi) aFicBmp : Chemin complet + Nom Bitmap externe Sorties : Img1W : Largeur image origine 1 externe Img1H : Hauteur image origine 1 externe Img2W : Largeur image origine 2 externe Img2H : Hauteur image origine 2 externe RapSrcW : Facteur de proportionnalité des largeurs d'images d'origine = Bmp2.picture.graphic.width / Bmp1.picture.graphic.width; RapSrcH : Facteur de proportionnalité des hauteurs d'images RapImgW : Facteur de proportionnalité des largeurs d'images = Bmp2.picture.graphic.width / aImg.width; RapImgH : Facteur de proportionnalité des hauteurs d'images ---------------------------------------------------------------------------------------------------} Declaration : Function FRapportOfSizeBmpScrToImageFixed(Const aFicBmp1,aFicBmp2 : String; aImg : TImage; Var Img1W,Img1H, Img2W,Img2H : Integer; Var RapSrcW, RapSrcH, RapImgW,RapImgH : Single) : Boolean; Function FRapportOfSizeBmpScrToImageFixed(Const aFicBmp1,aFicBmp2 : String; aImg : TImage; Var Img1W,Img1H, Img2W,Img2H : Integer; Var RapSrcW, RapSrcH, RapImgW,RapImgH : Single ) : Boolean; Begin Result := True; {1ère image} try aImg.Picture.LoadFromFile(aFicBmp1); except on EInvalidGraphic do begin aImg.Picture.Graphic := nil; Result := False; exit; end; end; Img1W := aImg.picture.graphic.width; Img1H := aImg.picture.graphic.height; {2ème image} try aImg.Picture.LoadFromFile(aFicBmp2); except on EInvalidGraphic do begin aImg.Picture.Graphic := nil; Result := False; exit; end; end; Img2W := aImg.picture.graphic.width; Img2H := aImg.picture.graphic.height; RapSrcW := Img2W / Img1W; RapSrcH := Img2H / Img1H; RapImgW := Img2W / aImg.Width; RapImgH := Img2H / aImg.height; End; Exemple d'utilisation : Procedure TFormUnivers.ChargeSequenceCreation... var Bmp : Tbitmap; W0,H0,Wi,Hi : Integer; RapSrcW, RapSrcH,RapImgW,RapImgH : Single; FicImage1,FicImage2 : String; begin FicImage1 := RepRes+'\'+'Sphère0.bmp'; ... ImgFond.Picture.LoadFromFile(ficImage1); {Image de Fond redessinée un peu plus grande} With ImgFond do begin Width := width + 30; Top := FormUnivers.ClientHeight div 2 - width; Height:= height + 30; Left := (FormUnivers.ClientWidth - Width ) div 2; Picture.LoadFromFile(ficImage1); end; ... {Image de Fond avec Poignées de déformation} FicImage2 := RepRes+'\'+'Sphère1.bmp'; BmpImageCreation := TBitMap.Create; BmpImageCreation.PixelFormat := pf24bit; BmpImageCreation.LoadFromFile(FicImage2); ... if FRapportOfSizeBmpScrToImageFixed (ficImage1,FicImage2,ImgFond,W0,H0,Wi,Hi, RapSrcW, RapSrcH, RapImgW, RapImgH ) then begin {dessin des 8 poignées} With BmpImageCreation.Canvas do begin Brush.Color:= clBlack; {poignées aux 4 coins d'une image} Rectangle(0,0,12,12); Rectangle(round(RapsrcW * W0) - 12,0,round(RapsrcW * W0),12); Rectangle(0,round(RapsrcH * H0)-12,12,round(RapsrcH * H0)); Rectangle(round(RapsrcW * W0) - 12,round(RapsrcH * H0)-12,round(RapsrcW * W0) +12,round(RapsrcH * H0)); {poignées au milieu des côtés} Rectangle(round(RapsrcW * W0/2)-6,0,round(RapsrcW * W0/2)+6,12); Rectangle(round(RapsrcW * W0)-12,round(RapsrcH * H0/2)-6,round(RapsrcW * W0) +12,round(RapsrcH * H0/2)+6); Rectangle(round(RapsrcW * W0/2)-6,round(RapsrcH * H0)-12,round(RapsrcW * W0/2)+6,round(RapsrcH * H0)+12); Rectangle(0,round(RapsrcH * H0/2)-6,12,round(RapsrcH * H0/2)+6); end; ImgFond.Picture.Assign(BmpImageCreation); // affichage ... BmpImageCreation.Free; end;
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.