Ridimensionare proporzionalmente un'immagine creando una grafica in miniatura

Nella "programmazione" grafica a miniatura è una versione di dimensioni ridotte di un'immagine.

Ecco un'idea per la tua prossima applicazione: crea un "selettore di moduli" per consentire agli utenti di selezionare e navigare facilmente tra i moduli aperti visualizzando le miniature di tutti in una finestra di dialogo.

Idea interessante? Sembra la funzione "Schede rapide" del browser IE 7 :)

Prima di creare effettivamente una funzione così accurata per la tua prossima applicazione Delphi, devi sapere come catturare l'immagine del modulo ("form-screen shot") e come ridimensionarla proporzionalmente all'immagine di anteprima desiderata.

Ridimensionamento proporzionale dell'immagine: creazione di miniature

Di seguito troverai un blocco di codice per acquisire l'immagine di un modulo (Form1) usando il GetFormImage metodo. La TBitmap risultante viene quindi ridimensionata per adattarsi alla larghezza massima dell'anteprima (200 pixel) e / o all'altezza (150 pixel).
Il ridimensionamento mantiene le proporzioni dell'immagine.

L'immagine risultante viene quindi visualizzata in un controllo TImage, denominato "Image1".

 const   maxWidth = 200; maxHeight = 150; var   miniatura: TBitmap; thumbRect: TRect; inizio   thumbnail: = Form1.GetFormImage;   provare     thumbRect.Left: = 0; thumbRect.Top: = 0;     // ridimensionamento proporzionale     Se thumbnail.Width> thumbnail.Height poi     inizio       thumbRect.Right: = maxWidth; thumbRect.Bottom: = (maxWidth * thumbnail.Height) div thumbnail.Width;     fine altrimenti inizia       thumbRect.Bottom: = maxHeight; thumbRect.Right: = (maxHeight * thumbnail.Width) div thumbnail.Height;     fine; thumbnail.Canvas.StretchDraw (thumbRect, thumbnail); // ridimensiona l'immagine     thumbnail.Width: = thumbRect.Right; thumbnail.Height: = thumbRect.Bottom;     // visualizza in un controllo TImage     Image1.Picture.Assign (anteprima);   infine     thumbnail.Free;   fine; fine; 

Notare la GetFormImage copia solo l'area client del modulo - se devi prendere l'intera "schermata" di un modulo (incluso il suo bordo) avrai bisogno di un approccio diverso ... più su di esso la prossima volta.