1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| {* ************************************************** *}
PROCEDURE CENTRE_IMAGE (LARGEUR_IMAGE ,HAUTEUR_IMAGE: Real;LARGEUR_FENETRE,HAUTEUR_FENETRE : REAL;
Var IMAGE_TOP,IMAGE_LEFT,IMAGE_WIDTH,IMAGE_HEIGHT : Real ;Marge_Left : Integer = 0;Marge_Top : Integer = 0);
// IMAGE doit être en Stretch
VAR R1,R2,LARGEUR,HAUTEUR : REAL;
BEGIN
IMAGE_TOP:=0;
R1:=LARGEUR_IMAGE / LARGEUR_FENETRE;
R2:=HAUTEUR_IMAGE/HAUTEUR_FENETRE;
IF (HAUTEUR_FENETRE>=HAUTEUR_IMAGE) AND (LARGEUR_FENETRE>=LARGEUR_IMAGE)THEN
BEGIN // Image entière
LARGEUR:=LARGEUR_IMAGE;
HAUTEUR:=HAUTEUR_IMAGE;
IMAGE_TOP:=TRUNC((HAUTEUR_FENETRE-HAUTEUR)/2)+ Marge_Top;
IMAGE_LEFT:=TRUNC((LARGEUR_FENETRE-LARGEUR)/2)+ Marge_Left;
IMAGE_WIDTH:=TRUNC(LARGEUR);
IMAGE_HEIGHT:=TRUNC(HAUTEUR);
END
ELSE
IF R1>=R2 THEN
BEGIN // Image trop large
LARGEUR:=LARGEUR_IMAGE/R1;
HAUTEUR:=HAUTEUR_IMAGE/R1;
IMAGE_TOP:=TRUNC((HAUTEUR_FENETRE-HAUTEUR)/2)+ Marge_Top;
IMAGE_LEFT:=TRUNC((LARGEUR_FENETRE-LARGEUR)/2)+ Marge_Left;
IMAGE_WIDTH:=TRUNC(LARGEUR);
IMAGE_HEIGHT:=TRUNC(HAUTEUR);
END
ELSE
BEGIN // Image trop haute
LARGEUR:=LARGEUR_IMAGE/R2;
HAUTEUR:=HAUTEUR_IMAGE/R2;
IMAGE_TOP:=TRUNC((HAUTEUR_FENETRE-HAUTEUR)/2)+ Marge_Top;
IMAGE_LEFT:=TRUNC((LARGEUR_FENETRE-LARGEUR)/2)+ Marge_left;
IMAGE_WIDTH:=TRUNC(LARGEUR);
IMAGE_HEIGHT:=TRUNC(HAUTEUR);
END;
END;
// **************************************************
.........................................................................
Exemple de code qui ne fonctonne pas :
// ----------------- IMAGE 1 ------------------------
RaveBitmap1 := MaPage.CreateChild(TRaveBitMap) as TRaveBitMap;
IF RaveBitmap1 = NIL THEN
BEGIN
SHOWMESSAGE('Erreur : création Image1.');
EXIT;
END;
RaveBitmap1.Parent:=MaPage;
RaveBitmap1.Name:='Image1';
RaveBitmap1.Image:=IMAGE1.Picture.Graphic;
Largeur_IMAGE_Zone:=RaveBitmap1.Width;
Hauteur_IMAGE_Zone:= RaveBitmap1.Height;
CENTRE_IMAGE(Largeur_IMAGE_Zone,Hauteur_IMAGE_Zone, // Pixels
Conv_CM_INCH(Cote_Pochette), // Largeur de la Zone sur la page Rave
Conv_CM_INCH(Cote_Pochette), // Hauteur de la Zone sur la page Rave
IMAGE_TOP,IMAGE_LEFT,IMAGE_WIDTH,IMAGE_HEIGHT); // Récupérer les valeurs
RaveBitmap1.Top := IMAGE_TOP + Conv_CM_INCH(MH_I1);
RaveBitmap1.Left := IMAGE_LEFT + Conv_CM_INCH(MG);
RaveBitmap1.width := IMAGE_WIDTH;
RaveBitmap1.Height := IMAGE_HEIGHT;
_____________________________________________________________
Par contre
J'arrive à bidouiller quelque chose tant que la taille de l'image est >= à ma variable Cote_Pochette
// **************************************************
Function Conv_CM_INCH( Nombre : Real ): Real;
Begin
Result:=Nombre / 2.54;
End;
// **********************************************************
// En cm
Inch:=2.54;
MG := 1.2; // Marge de gauche
MH_I1 := 1.2; // Marge de haut Image1
Cote_Pochette :=12; // Coté de la pochette
...........................................................
If Image1.Picture.Bitmap.Height >= Image1.Picture.Bitmap.Width Then
Coef1:=Image1.Picture.Bitmap.Width / Image1.Picture.Bitmap.Height
Else
If Image1.Picture.Bitmap.Height < Image1.Picture.Bitmap.Width Then
Coef1:= Image1.Picture.Bitmap.Height /Image1.Picture.Bitmap.Width;
.........................................................
If Image1.Picture.Bitmap.Height >= Image1.Picture.Bitmap.Width Then
Begin
// Pour centrer l'image en largeur
RaveBitmap1.Top := ((Conv_CM_INCH(Cote_Pochette)) - RaveBitmap1.Height) /2 + (Conv_CM_INCH(MH_I1));
Largeur_Image1:= Conv_CM_INCH(Cote_Pochette * Coef1);
Marge1:= ((Conv_CM_INCH(Cote_Pochette) )-Largeur_Image1) / 2; // Pour centrer en largeur
RaveBitmap1.Left :=RaveBitmap1.Left + Marge1; // Pour centrer l'image en largeur
End
Else
If Image1.Picture.Bitmap.Height < Image1.Picture.Bitmap.Width Then
Begin
// Pour centrer l'image en hauteur
Hauteur_Image1:= Conv_CM_INCH(Cote_Pochette * Coef1);
Marge1:= ((Conv_CM_INCH(Cote_Pochette) )- Hauteur_Image1) / 2; // Pour centrer en hauteur
RaveBitmap1.Top :=RaveBitmap1.Top + Marge1; // pour centrer l'image
End;
// ------------ |
Partager