Bonjour à tous,je voudrai savoir comment est il possible de réaliser un zoom sur une image (affichée dans un Timage),Merci.
Bonjour à tous,je voudrai savoir comment est il possible de réaliser un zoom sur une image (affichée dans un Timage),Merci.
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»
voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 function TForm1.GetZoomRect: TRect; const T:array[-5..5] of Single=(0.1,0.2,0.3,0.5,0.75,1,1.5,2,3,5,10); begin Result.TopLeft:=Point(0,0); Result.Right:=Round(FSrcBitmap.Width*T[TrackBar1.Position]); Result.Bottom:=Round(FSrcBitmap.Height*T[TrackBar1.Position]); end; procedure TForm1.FormCreate(Sender: TObject); begin FSrcBitmap:=TBitmap.Create; FSrcBitmap.LoadFromFile({path}); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FSrcBitmap.Free; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin img1.Canvas.StretchDraw(GetZoomRect,FSrcBitmap); end;
merci pour votre reponse mais je n'ai pas trés bien saisi ce bout de code...existe t il une fonction qui permet de faire un zoom sur un timage??
je vous rassure j'ai cherché sur l'aide mais je n'ai rien trouvé :-(
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»
Bonjour,
... dans la procedure TForm1.FormCreate(Sender: TObject) on crée le BitMap (support invisible mémorisant un dessin ou d'une photo) nommé FSrcBitmap qu'on charge depuis le disque avec FSrcBitmap.LoadFromFile(c:\...\'monFichier.bmp');je n'ai pas trés bien saisi ce bout de code
... et dans la procedure TForm1.TrackBar1Change(Sender: TObject) l'instruction img1.Canvas.StretchDraw(GetZoomRect,FSrcBitmap) dessine dans le TImage le Bitmap précédent FSrcBitmap ramené à l'échelle (StretchDraw) du rectangle GetZoomRect obtenu avec la function TForm1.GetZoomRect: TRect en fonction de la TrackBar1.Position.
... et avec la procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction) on libère la mémoire correspondante avec FSrcBitmap.Free.
... je n'ai jamais vu une telle fonction dans l'Aide Delphi, mais il n'y a pas de raison que le code fourni par J_apprenti ne marcherait pas : suffit de l'essayer il n'est pas long.je vous rassure j'ai cherché sur l'aide mais je n'ai rien trouvé
A+
N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi
Salut.
tu dois faire une copie de l'image deja afficher dans Timage comme un TBitmap pour se servir de la methode StretchDraw du canvas du Bitmap, ensuite faire le traitement en memoir sur ton bitmap puis afficher le resultat dans timage
je crois qu'une autre source pourra bien t'aider
Petit utilitaire de traitement d'image JPEG realisè par mr Sub0
Zoom, luminosité, contraste, flou gaussien, qualité JPEG, prévisualisation et sauvegarde.
Enregistrement des paramètres de l'appli dans un fichier INI...
Merci pour l'utilitaire,il regroupe une grande partie de ce que je veux réaliser ,me reste plus qu'à le comprendre
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»
Merci Gilbert Geyer pour les explications,ça devient plus clair dans ma tête
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»
Salut!
Pour info, je possède un code pour effectuer un zoom avec un filtre anti-aliasing (comme dans l'aperçu de windows) ce qui permet d'obtenir une qualité d'image supérieure à la méthode stretch :
http://sub0.developpez.com/delphi/AAlias.zip
De retour parmis vous après 10 ans!!
Merci SubZero pour ce petit utilitaire,il est super mais je ne trouve pas le code pour le zoom la dedans
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»
Il s'agit de la fonction Stretch32 de l'unité Transforms.pas. Tu trouveras un exemple d'utilisation de cette fonction dans l'unité Unit1.pas... Pour info, le redimensionnement avec filtre anti-aliasing nécessite plus de ressources qu'un simple stretchdraw et ce filtre est surtout utile pour réduire les images, plus que pour les grossir...
Dans mon jeu d'échecs, lorsqu'on redimensionne la fenêtre, j'utilise un simple StretchDraw puis j'ajoute le filtre anti-aliasing lorsqu'on relache le bouton de la souris. Cette démo te permettra de bien visualiser la différence entre les 2 méthodes de redimensionnement d'images...
De retour parmis vous après 10 ans!!
c'est peut-être un peu tard pour dire cela mais il existe un bon composant Zoom dans la JVCL
MVP Embarcadero
Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
SGBD : Firebird 2.5, 3, SQLite
générateurs États : FastReport, Rave, QuickReport
OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd
Pour un tit editeur d'image perso, j'utilise un TImage avec les property : Center/Stretch/Proportional a true et je joue sur le Width/Height .....
Si tu souhaite faire de la qualité, passe par l'unitee ALGraphic (a dl sur le net) pour copier de maniere lissée.
On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
--
Pourquoi tant de haine pour cette pauvre aide Delphi ????
Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
--
Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager