Calcule les Facteurs de proportionnalité entre deux images

Contenu du snippet

{--------------------------------------------------------------------------------------------------- 
 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;





Compatibilité : Delphi 5

A voir également

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.