Les Snippets

Connexion

Calcule les Facteurs de proportionnalité entre deux images

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 06/12/2008 10:15:10 et initié par Jean_Jean [Liste]
Date de mise à jour : 09/12/2008 14:29:34
Vue : 1970
Catégorie(s) : Trucs & Astuces, Graphique
Langages dispo pour ce code :
- Delphi 5



Langage : Delphi 5
Date ajout : 06/12/2008
Posté par Jean_Jean [Liste]
DateMAJ : 09/12/2008

{--------------------------------------------------------------------------------------------------- 
 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;
Remarque :
La fonction répond aux besoins suivants :
1. Connaître les dimensions d'origine d'une image
2. Se positionner avec précision sur un bitmap affiché dans un conteneur Image de dimensions fixes (propriété stretch à true) afin de pouvoir redessiner certains éléments de l'image d'origine
3. Pouvoir utiliser différents facteurs de proportionnalité en fonction du travail à faire sur l'image 1 ou 2
=> facteurs RapImg(W ou H) ou RapSrc(W ou H) :

ShowMessage('Image 1 : '+#13#10+
          floattostr(RapImgW)+'x'+inttostr(W0)
          +'= '+floattostr(W0*RapImgW)+#13#10
          +floattostr(RapSrcW)+'x'+inttostr(W0)
          +' = '+floattostr(W0*RapSrcW)+#13#10
          +'Image 2 : '+#13#10
          +floattostr(RapImgW)+'x'+inttostr(Wi)
          +' = '+floattostr(Wi*RapImgW)+#13#10
          +floattostr(RapSrcW)+'x'+inttostr(Wi)
          +' = '+floattostr(Wi*RapSrcW)
          );

Snippets en rapport avec : Image, Bitmap, Proportionnalité, Dimensions, Adaptation



Codes sources en rapport avec : Image, Bitmap, Proportionnalité, Dimensions, Adaptation

{Visual Basic, VB6, VB.NET, VB 2005} DÉCOUPEUR DE SPRITES (POUR JEUX RPG)
Voici une petite source toute simple qui permet de découper des sprites de manière industrielle, eff...

{Delphi} ANAGLYPHEUR OU COMMENT VOIR EN RELIEF LES STÉRÉOSCOPES ANCESTRAUX ...
Permet de créer un anaglyphe affichable en plein écran à partir d'images stéréoscopiques (liées ou n...

{Visual Basic, VB6, VB.NET, VB 2005} MENU POPUP AVEC IMAGE
Placer des bitmaps 16*16 pixel dans les menus standards et popup des forms. J'ai essayé d'utilis...

{Delphi} UNITE GRAPHIQUE IMOD, AVEC EXEMPLE
Bonjour, Voici une unité graphique, reprenant la plupart des opérations et des manipulations sur ...

{Delphi} MINIMISER LES COULEURS D' UNE IMAGE VENANT DU SCANNER OU AUTRE
Dans le même esprit que ma source : http://www.delphifr.com/codes/CHANGER-COULEUR-PIXEL-PIXELS-COUL...

{C / C++ / C++.NET} BOITE DE DIALOGUE ANIMÉE AVEC IMAGE DE FOND
Ceci est mon premier code. Je pense que si on est resté longtemps consommateur, on peut en retour d...

{Visual Basic, VB6, VB.NET, VB 2005} OUVERTURE D'UN FICHIER BITMAP EN NATIF
Ce code permet d'ouvir un fichier Bmp. Oui, c'est sur il y a le composant Microsoft qui fait mieu...

{C# / C#.NET} IMAGES : FILTRES PAR CONVOLUTION
Voici une classe présentant un ensemble de filtres dit de convolutions (on applique une matrice à ch...

{C# / C#.NET} CACHER DU TEXTE DANS UNE IMAGE PAR STÉGANOGRAPHIE
Cacher du texte dans une image en C# Je suis tombé tout par hasard sur ce code en delphi crée par...

{C / C++ / C++.NET} CAPTURE DE L'IMAGE DE LA WEBCAM
Ce programme permet de visualiser dans une picturebox l'image de votre webcam, le raffrichissement n...