Redimensionner proportionnellement une image en créant des graphiques miniatures

Dans la "programmation" graphique a la vignette est une version réduite d'une image.

Voici une idée pour votre prochaine application: créer un "sélecteur de formulaire" pour permettre aux utilisateurs de sélectionner et de naviguer facilement dans les formulaires ouverts en affichant leurs miniatures dans une boîte de dialogue.

Idée intéressante? Cela ressemble à la fonction "Quick Tabs" du navigateur IE 7 :)

Avant de créer réellement une telle fonctionnalité pour votre prochaine application Delphi, vous devez savoir comment récupérer l'image du formulaire ("capture d'écran de formulaire") et comment la redimensionner proportionnellement à l'image miniature souhaitée.

Redimensionnement d'image proportionnel: création de graphiques miniatures

Vous trouverez ci-dessous un bloc de code pour prendre l'image d'un formulaire (Form1) en utilisant le GetFormImage méthode. Le TBitmap résultant est ensuite redimensionné pour s'adapter à la largeur maximale des vignettes (200 pixels) et / ou à la hauteur (150 pixels).
Le redimensionnement conserve le rapport hauteur / largeur de l'image.

L'image résultante est ensuite affichée dans un contrôle TImage, nommé "Image1".

 const   maxWidth = 200; maxHeight = 150; var   vignette: TBitmap; thumbRect: TRect; commencer   vignette: = Form1.GetFormImage;   essayer     thumbRect.Left: = 0; thumbRect.Top: = 0;     // redimensionnement proportionnel     si thumbnail.Width> thumbnail.Height ensuite     commencer       thumbRect.Right: = maxWidth; thumbRect.Bottom: = (maxWidth * thumbnail.Height) div thumbnail.Width;     fin sinon commencer       thumbRect.Bottom: = maxHeight; thumbRect.Right: = (maxHeight * thumbnail.Width) div thumbnail.Height;     fin; thumbnail.Canvas.StretchDraw (thumbRect, thumbnail); // redimensionner l'image     thumbnail.Width: = thumbRect.Right; thumbnail.Height: = thumbRect.Bottom;     // affichage dans un champ TImage     Image1.Picture.Assign (miniature);   enfin     thumbnail.Free;   fin; fin; 

Noter la GetFormImage copie uniquement la zone client du formulaire - si vous avez besoin de prendre toute la "capture d'écran" d'un formulaire (y compris sa bordure), vous aurez besoin d'une approche différente… en savoir plus la prochaine fois.