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.

Publicado por

danielluyo

Programador con experiencia en Delphi, Java, C/C++, VB, SQL, PHP.

5 comentarios en «Dibujando con Delphi (1)»

  1. estoy entrando en el mundo de la informatica y me parece muy interesante todo lo comentaste sobre las diferentes APIs, es bueno informarse y

    entre aqui buscando un procedimiento de como poder cambiar la opacidad de una image:TImage,variando el porcentaje q se le de..(volverlo semitrasnsparente, para q se vea la imagen q esta de fondo) ; , vi muchos juegos q manejan imagenes semitrasnparentes un delante de otra , y no importa si la imagen del fondo se mueve.
    la verdad quisiera q me ayudes ya que soy nuevo en esto de programar
    Te doy las gracias d antemano.

    1. En general los colores en la computadora están formados por la mezcla de 3 colores Rojo, Verde, Azul lo que se conoce como RGB. La imágenes puede usar diferentes diferentes profundidades de color (color depth)., lo que indica cuantos bits se van a usar para formar el color de un punto (pixel) en la imágen. POr ejemplo en imágenes en Blanco y Negro se usa un 1bit por cada pixel, si el bit es cero será negro si es 1 será blanco. Conforme uno aumenta el número de bits por pixel (bpp) aumenta el número de colores posibles (y también el tamaño del archivo). Para tener colores más reales se usa 8 bits (256 valores) para cada intensidad de Rojo, Verde y Azul, esto se llama Truecolor o 24bpp.
      La transparencia se consigue de varias formas, en realidad la transparencia no es posible como tal en el monitor, ya que los puntos en la pantalla no tienen «capas», un punto tiene un solo color. La transparencia es una ilusión creada al combinar los colores de adelante con los colores de atrás. Existe varias formas de crear estas combinaciones, la más conocida es la que se denomina Alpha Transparency o Alpha Channel, usualmente se representa por una profundidad de color de 32bpp, donde en realidad se tiene 24bpp + 8 bits que indican el nivel de transparencia. El Alpha Channel se usa para indicar cuan «semi-tranparente» (o totalmente transparent o totalmente opaco) es un pixel. Otra forma de transparencia (total) es definiendo un color sólido en la imágen que será totalmete transparente. Los diferentes formatos gráficos soportan de forma diferente la transparencia, un formato ampliamente usado en ese sentido es el .PNG.
      Delphi soporta nativamente la transparencia de forma limitada. En las versiones más nuevas ya hay soporte para PNG.
      En todo caso si es para juegos por ejemplo lo más recomendables es usar alguna librería especializada, por ejemplo DirectX, SDL, OpenGL soportan transparencia, GDI+ y Aggpas también. Más adelante escribiré un post al respecto.

      Saludos

  2. Gracias por la respuesta aunque me llega un poco tarde, pero mas vale tarde que nunca, es cierto la parte en que decis que la semitransparencia es solo una ilusion, es muy buena tu explicacion sobre el tema, la semitransparencia lo queria usar en el juego que de seguro debes conocer es el clasico PAC-MAN lo estaba codificando , el juego lo termine pero la parte de la Inteligencia los fantasmas no es tan bueno, me dijeron que tengo q usar algoritmos de Inteligencia Artificial , yo lo programe con puro if’s en base de PERCIBIR-PENSAR-ACTUAR.

    Si sabes de algun tutorial sobre algoritmos de Inteligencia Artificial te lo agredeceria.

    Por cierto encontre internet un excelente programa sobre la semitransaprencia en DELPHI(con condigo) con 5 metodos diferentes,usando el API de Windows, quisiera mandartelo si se puede.

    Gracias.

    Saludos.

    1. Puedes postear los links, siempre es bueno tener más fuentes de conocimiento.
      Para la inteligencia en los juegos, si te funciono bien con IF entonces perfecto. Por supuesto siempre puedes sobre-complicarte y buscar el algoritmo perfecto, como método de estudio está bien. En la vida real uno debe seguir el principio K.I.S.S. «Keep it simple, stupid!», donde lo más simple que consiga el objetivo es el logro máximo.
      Sobre inteligencia artificial ciertamente tengo sólo vagos conocimientos, pero daré una mirada.

      Gracias por leer este blog!!!!

Deja un comentario