Cómo: Mejorar el rendimiento evitando el ajuste de tamaño automático
Actualización: noviembre 2007
GDI+ puede ajustar automáticamente la escala de una imagen a medida que se dibuja pero disminuye el rendimiento. Como alternativa, puede controlar la escala de la imagen pasando las dimensiones del rectángulo de destino al método DrawImage.
Por ejemplo, en la siguiente llamada al método DrawImage se especifica una esquina superior izquierda de (50, 30) pero no se 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 ésta es la versión más fácil del método DrawImage en lo que se refiere al número de argumentos requeridos, puede que no sea la más eficaz. Si la resolución utilizada por GDI+ (normalmente 96 puntos por pulgada) es distinta a la almacenada en el objeto Image, el método DrawImage ajustará la escala de la imagen. Por ejemplo, supongamos un objeto Image con un ancho de 216 píxeles y un valor de resolución horizontal almacenado de 72 puntos por pulgada. Como 216/72 es 3, DrawImage ajustará la escala de la imagen de forma que tenga un ancho de 3 pulgadas con una resolución de 96 puntos por pulgada. Es decir, DrawImage mostrará una imagen con un ancho de 96x3 = 288 píxeles.
Aunque la resolución de pantalla sea distinta de 96 puntos por pulgada, GDI+ ajustará probablemente la imagen como si la resolución de pantalla fuera 96 puntos por pulgada. Esto es debido a que un objeto Graphics de GDI+ se asocia con un contexto de dispositivo, y cuando GDI+ consulta a dicho contexto para averiguar la resolución de pantalla, el resultado suele ser 96, sea cual sea la resolución de pantalla real. Puede evitar el ajuste de escala automático especificando 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, el ancho y el alto del rectángulo de destino no se especifican y se ajusta automáticamente el tamaño de la imagen. En el segundo caso, se especifica que el ancho y el alto (medidos en píxeles) del rectángulo de destino sean iguales que el ancho y el alto de la imagen original. En la siguiente ilustración se muestra la imagen dos veces representada.
Dim image As New Bitmap("Texture.jpg")
e.Graphics.DrawImage(image, 10, 10)
e.Graphics.DrawImage(image, 120, 10, image.Width, image.Height)
Image image = 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 formularios Windows Forms y requiere PaintEventArgs e, 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 su sistema.