Agrandir une image depuis le code [Résolu]

Signaler
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
-
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
-
Bonjour,

Je souhaite agrandir/reduire une image pour faire un zoom + et -

La réduction fonctionne bien mais je ne peux pas agrandir l'image à une taille superieur à celle fixée lors de la conception. Pourquoi ??

J'ai placé l'image dans une scrollBox, c'est identique.

Voici le code
procedure TForm1.BtnZoomPlusClick(Sender: TObject);
var B : Tbitmap;
begin
  B := Tbitmap.Create;
  Image1.Width := round(Image1.Width *1.1); 
  Image1.Height := round(Image1.Height *1.1);
  
  Image1.Canvas.Brush.color := Clblack;
  Image1.canvas.FrameRect(Image1.ClientRect);
  ImageList1.GetBitmap(0,B);  // Charge l'image dans le bitmap
  
  Image1.Canvas.StretchDraw(Image1.ClientRect,B);  // Copie aux nouvelles dimensions
end;

procedure TForm1.BtnZoomMoinsClick(Sender: TObject);
var B : Tbitmap;
begin
  B := Tbitmap.Create;
  Image1.Width := round(Image1.Width *0.9);
  Image1.Height := round(Image1.Height *0.9);
  
  Image1.Canvas.Pen.color := Clblack;
  Image1.canvas.FrameRect(Image1.ClientRect);
  ImageList1.GetBitmap(0,B);  // Charge l'image dans le bitmap
  
  Image1.Canvas.StretchDraw(Image1.ClientRect,B); // Copie aux nouvelles dimensions
end;


Merci.
A voir également:

6 réponses

Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Image1.Picture.Bitmap.Width  := round(Image1.Picture.Bitmap.Width  *1.1);
Image1.Picture.Bitmap.Height := round(Image1.Picture.Bitmap.Height *1.1);

Image1.Picture.Bitmap.Canvas.StretchDraw(Image1.Picture.Bitmap.Canvas.ClipRect, B);
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
17
Salut,

Attention !

Image1.Canvas <> Image1.Picture.Bitmap.Canvas
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Salut Caribensila,

Oui ok, c'est effecivement plus correct de faire Image1.Picture.Bitmap.Canvas.StretchDraw(Image1.ClientRect,B);

Mais cela ne change (malheureusement) rien à mon problème. La taille de l'image bien qu'agrandi par BtnZoomPlus au dela de la taille de la conception, elle reste visuellement sur la forme à la taille conception.

Pour info, j'utilise D7 personnal.
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Caribensila, si tu as une explication, je suis preneur.

Le code écrit comme ci-dessous fonctionne correctement.
J'agrandi le Timage, je copie le bitmap dans le canvas du Timage et ensuite je redimensionne le Bitmap du Tpicture !!??
J'ai fait différents tests et visiblement y'a que dans cette ordre que j'obtient le bon fonctionnement. C'est incompréhensible ?

  B := Tbitmap.Create;
  ImageList1.GetBitmap(0,B);

  // Sans ce paragraphe, ça ne fonctionne pas
  Image1.Width  := round(Image1.Width  *1.1);
  Image1.Height := round(Image1.Height *1.1);
  Image1.Canvas.StretchDraw(Image1.ClientRect,B); 

  Image1.Picture.Bitmap.Width  := round(Image1.Picture.Bitmap.Width  *1.1);
  Image1.Picture.Bitmap.Height := round(Image1.Picture.Bitmap.Height *1.1);


// AVEC CETTE LIGNE, ça ne fonctionne pas
//  Image1.Picture.Bitmap.Canvas.StretchDraw(Image1.Picture.Bitmap.Canvas.ClipRect,B);



Par exemple agrandir le Bitmap avant comme ceci, ne fonctionne pas

  Image1.Width  := round(Image1.Width  *1.1);
  Image1.Height := round(Image1.Height *1.1);
  Image1.Picture.Bitmap.Width  := round(Image1.Picture.Bitmap.Width  *1.1);
  Image1.Picture.Bitmap.Height := round(Image1.Picture.Bitmap.Height *1.1);

  Image1.Canvas.StretchDraw(Image1.ClientRect,B); 


Merci.
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Voila, le bon bout de code (qui est bien plus logique !!).

L'image dans le scrollbox est zoomée, et les barres de défilements permettent de se déplacer sur les différentes parties de l'image.

  // Redimensionne le BitMap
  Image1.Picture.Bitmap.Width  := round(Image1.Picture.Bitmap.Width  *1.1);
  Image1.Picture.Bitmap.Height := round(Image1.Picture.Bitmap.Height *1.1);

  // Redimensionne le "conteneur" Timage dans le scrollbox
  Image1.Width  := round(Image1.Width  *1.1);
  Image1.Height := round(Image1.Height *1.1);

  // Copier aux nouvelles dimensions
  Image1.Picture.Bitmap.Canvas.StretchDraw(Image1.Picture.Bitmap.Canvas.ClipRect,B);



Merci Caribensila.
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Plutôt sympat ton truc pour remplacer les scrollbox, je l'adopte.

Merci encore Caribensila.