Dibujando con Delphi (1)

Delphi tiene varios mecanismos que permiten dibujar en una aplicación. Para empezar vamos a ver algunas cosas básicas.

Pensando como un niño de 5 años para dibujar necesitamos un papel en blanco un lápiz y crayones. En principio en Delphi es igual, el papel se llama Canvas, al lápiz Pen y a los crayones de colores Brush.

Nota: para avanzados: Canvas, Pen y Brush son conceptos de alto nivel, Windows tiene sus API que son un poco diferentes.

Todo lo que se ve en la pantalla en una aplicación Delphi está dibujado sobre algún Canvas.

Muchos controles tienen su propiedad Canvas como pública, lo que nos permite dibujar directamente sobre ellos. En otros casos podemos sobreescribir la forma como se dibuja un control usando el evento OnCustomDrawCell que pasa como parámetro el Canvas del control. Esto es muy potente y nos permite personalizar el aspecto visual de casi cualquier control.

Existen varias APIs que nos permiten dibujar en Delphi. Cuando usamos los métodos del objeto Canvas estaremos usando GDI de Windows que es la forma básica de dibujar, y nos permite cosas como dibujar lineas, circulos, cuadrados, texto.

Otra API más avanzada es GDI+ (GDI plus), que está disponible desde Windows XP, esta API tiene funciones mucho más avanzadas que GDI, permitiendo degradados, transparencias, dibujar 2D emplenado antaliasing (lo que permite lineas menos pixeleadas),  trasnformaciones y más. Delphi no incluye un componente ni funciones para trabajar con GDI+ directamente, pero existen varios componentes y librerías de terceros que nos permiten usar GDI+, por ejemplo http://www.bilsen.com/gdiplus/, o http://www.mitov.com/html/igdi_.html.

A partir de Windows 7, Microsoft ha introducido una API aún más avanzada llamada Direct2D, aquí si Delphi incluye soporte para esta API directamente en Delphi 2010.

Aparte de las APIs propias de Windows existen muchas otras librerias, algunas de mejor calidad, otras orientadas a la velocidad, otras para 3D.

Por ejemplo tenemos SDL, OpenGL, DirectX.

Una librería muy interesante es AggPas que es un port de AGG (Anti Grain Geometry), muy fácil de usar.

En el siguiente post veremos algunos ejemplos de algunas de éstas librerías.

Anuncios