Cambiar el tamaño proporcionalmente de una imagen creando gráficos en miniatura

En gráficos "programación" a miniatura es una versión de tamaño reducido de una imagen.

He aquí una idea para su próxima aplicación: cree un "selector de formularios" para que los usuarios puedan seleccionar y navegar fácilmente a través de formularios abiertos mostrando miniaturas de todos ellos en una ventana de diálogo.

¿Idea interesante? Suena como la función "Pestañas rápidas" del navegador IE 7 :)

Antes de crear una característica tan ordenada para su próxima aplicación Delphi, necesita saber cómo capturar la imagen del formulario ("captura de pantalla del formulario") y cómo cambiar su tamaño proporcionalmente a la imagen en miniatura deseada.

Cambio de tamaño de imagen proporcional: creación de gráficos en miniatura

A continuación encontrará un bloque de código para tomar la imagen de un formulario (Form1) utilizando el GetFormImage método. El TBitmap resultante se redimensiona para ajustarse al ancho máximo de la miniatura (200 píxeles) y / o la altura (150 píxeles).
Cambiar el tamaño mantiene la relación de aspecto de la imagen.

La imagen resultante se muestra en un control de TImage, denominado "Imagen1".

 const   maxWidth = 200; maxHeight = 150; var   miniatura: TBitmap; thumbRect: TRect; empezar   miniatura: = Form1.GetFormImage;   tratar     thumbRect.Left: = 0; thumbRect.Top: = 0;     // cambio de tamaño proporcional     Si thumbnail.Width> thumbnail.Height luego     empezar       thumbRect.Right: = maxWidth; thumbRect.Bottom: = (maxWidth * thumbnail.Height) div Ancho de miniaturas;     fin más comienza       thumbRect.Bottom: = maxHeight; thumbRect.Right: = (maxHeight * thumbnail.Width) div miniatura.Altura;     final; thumbnail.Canvas.StretchDraw (thumbRect, thumbnail); //cambiar el tamaño de la imagen     thumbnail.Width: = thumbRect.Right; thumbnail.Height: = thumbRect.Bottom;     // mostrar en un control de TImage     Image1.Picture.Assign (miniatura);   finalmente     thumbnail.Free;   final; final; 

Nota la GetFormImage solo copia el área del cliente del formulario; si necesita tomar la "captura de pantalla" completa de un formulario (incluido su borde), necesitará un enfoque diferente ... más sobre esto la próxima vez.