Procedimiento para mejorar el rendimiento evitando el ajuste de tamaño automático

GDI+ podría escalar automáticamente una imagen a medida que se dibuja, lo que reduciría el rendimiento. Como alternativa, puede controlar el escalado de la imagen si pasa las dimensiones del rectángulo de destino al método DrawImage.

Por ejemplo, la siguiente llamada al método DrawImage especifica una esquina superior izquierda de (50, 30), pero no especifica un rectángulo de destino.

e.Graphics.DrawImage(image, 50, 30);  // upper-left corner at (50, 30)
e.Graphics.DrawImage(image, 50, 30) ' upper-left corner at (50, 30)

Aunque esta es la versión más sencilla del método DrawImage en lo que respecta al número de argumentos requeridos, no es necesariamente la más eficaz. Si la resolución que usa GDI+ (normalmente, 96 puntos por pulgada) es diferente de la resolución que está almacenada en el objeto Image, el método DrawImage escalará la imagen. Por ejemplo, supongamos que un objeto Image tiene un ancho de 216 píxeles y un valor de resolución horizontal almacenado de 72 puntos por pulgada. Dado que 216/72 es 3, DrawImage escalará la imagen para que tenga un ancho de 3 pulgadas en una resolución de 96 puntos por pulgada. Es decir, DrawImage mostrará una imagen con un ancho de 96 × 3 = 288 píxeles.

Incluso si la resolución de la pantalla es diferente de 96 puntos por pulgada, GDI+ probablemente escalará la imagen como si la resolución fuera de 96 puntos por pulgada. Esto se debe a que hay un objeto Graphics de GDI+ asociado a un contexto de dispositivo y, cuando GDI+ consulta el contexto de dispositivo de la resolución de pantalla, el resultado suele ser 96, independientemente de la resolución de pantalla real. Para evitar el escalado automático, especifique el rectángulo de destino en el método DrawImage.

Ejemplo

En el ejemplo siguiente se dibuja la misma imagen dos veces. En el primer caso, no se especifican el ancho y el alto del rectángulo de destino y la imagen se escala automáticamente. En el segundo caso, se especifican el ancho y el alto (medidos en píxeles) del rectángulo de destino para que sean iguales que el ancho y el alto de la imagen original. En la ilustración siguiente se muestra la imagen representada dos veces:

Captura de pantalla que muestra imágenes con textura escalada.

Image image = new Bitmap("Texture.jpg");

e.Graphics.DrawImage(image, 10, 10);
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height);
Dim image As New Bitmap("Texture.jpg")

e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)

Compilar el código

El ejemplo anterior está diseñado para su uso con Windows Forms y requiere PaintEventArgse, que es un parámetro del controlador de eventos Paint. Reemplace Texture.jpg por un nombre de imagen y una ruta de acceso que sean válidos en el sistema.

Consulte también