{---------------------------------------------------------------------------------------------------
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)
);
{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 IMAGEPlacer des bitmaps 16*16 pixel dans les menus standards et popup des forms.
J'ai essayé d'utilis...
{Delphi} UNITE GRAPHIQUE IMOD, AVEC EXEMPLEBonjour,
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 AUTREDans 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 FONDCeci 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 NATIFCe 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 CONVOLUTIONVoici 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ÉGANOGRAPHIECacher 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 WEBCAMCe programme permet de visualiser dans une picturebox l'image de votre webcam, le raffrichissement n...