Agrandir une image depuis le code [Résolu]

jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 5 oct. 2010 à 10:07 - Dernière réponse : jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention
- 6 oct. 2010 à 20:47
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.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 5 oct. 2010 à 19:26
1
Merci
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);

Merci Caribensila 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Caribensila
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 5 oct. 2010 à 16:29
0
Merci
Salut,

Attention !

Image1.Canvas <> Image1.Picture.Bitmap.Canvas
Commenter la réponse de Caribensila
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 5 oct. 2010 à 19:12
0
Merci
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.
Commenter la réponse de jderf
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 5 oct. 2010 à 21:05
0
Merci
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.
Commenter la réponse de jderf
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 5 oct. 2010 à 22:39
0
Merci
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.
Commenter la réponse de jderf
Caribensila 2684 Messages postés jeudi 15 janvier 2004Date d'inscription 26 juillet 2018 Dernière intervention - 5 oct. 2010 à 23:02
0
Merci
Eh bein voilà !
Je me demandais comment j'allais bien pouvoir t'expliquer tout ça mais, finalement, c'est toujours beaucoup mieux quand on comprend tout seul, non ?

2 conseils :
- Mets Image1.AutoSize à true et laisse tomber le redimensionnement du 'conteneur'.
- Plutôt qu'un ScrollBox, utilise ce truc que je trouve perso plus ergonomique.
Commenter la réponse de Caribensila
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 6 oct. 2010 à 20:47
0
Merci
Plutôt sympat ton truc pour remplacer les scrollbox, je l'adopte.

Merci encore Caribensila.
Commenter la réponse de jderf

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.