GUI+: Interfaz Avanzado de Diseño de Gráficos

(crear gráficos, dibujar texto y manipular imágenes gráficas como si fueran objetos)

Fecha: 10/Abr/2005 (06/04/2005)
Autor: Arbis Percy Reyes Paredes - Perxindrome [email protected]

 


CAPÍTULO I

Introducción a GDI+: la sucesora de GDI

 ¿Qué es...? ¿Cómo funciona...? ¿Aplicaciones independientes del dispositivo...?

Si alguna vez te has planteado estas preguntas, seguramente estabas deseando que alguien te dé una explicación sencilla y precisa. Pensando en esto es que me animé a realizar este trabajo para tratar de ayudar a toda la comunidad desarrolladora de aplicaciones .NET. Bueno, empecemos.... pero antes debo anticiparles o prevenirles que en este capítulo sólo explicaré conceptos generales, es por eso que algunos ejemplos que incluyo no están detallados o explicados completamente. El objetivo es que te formes una idea o captes conceptos importantes con respecto a GUI+. Más adelante en otros capítulos se explicarán temas interesantes al respecto, pero por ahora basta con esto. Debo decirle que este capítulo viene a formar la primera parte de todo un manual que se irá explicando por capítulos. Al final cuando termine de publicar todo los capítulos que formará parte de este manual agregaré una página dónde estarán todos los links respectivos de los temas. 

Ahora sí empecemos. GDI+ es una interfaz de programación de aplicaciones (API) que se expone a través de un conjunto de clases implementadas como código administrado. GDI+ viene a ser la interfaz de dispositivo gráfico que se encarga de mostrar información en pantallas e impresoras, la cual permite a nosotros, como programadores de aplicaciones, mostrar información en una pantalla o impresora sin tener que preocuparnos por los detalles de un dispositivo de presentación específico, es decir, cuando desarrollemos aplicaciones usando los métodos suministrados por las clases de GDI+ no tendremos porque preocuparnos por manejar cuestiones de hardware gráfico, ya que todo este trabajo lo hará los métodos GDI+ , llamando a los controladores de dispositivo específicos, de esta manera GDI+ aísla o separa a la aplicación del hardware gráfico, y este aislamiento es el que permite a nosotros, los programadores, crear aplicaciones independientes del dispositivo. Ahora podemos decir con seguridad que GDI+ es una interfaz de dispositivo gráfico que permite a los programadores escribir aplicaciones independientes del dispositivo.

Todo el código que  se encuentran más adelante se basa en System.Drawing y System.Drawing.Drawing2D, la explicación es que las clases que producen gráficos vectoriales en  Visual Basic .NET están contenidas en estos  espacios de nombres.

Imports System.Drawing
Imports System.Drawing.Drawing2D

La  estructura  de la interfaz de clases administradas en GDI+  incluye :

Clases: La clase Graphics es la base de la funcionalidad de GDI+; es la clase que realmente dibuja líneas, curvas, figuras, imágenes y texto. Estas Clases cooperan entre ellas, es decir trabajan en conjunto, pero siempre al mando de nuestra majestad... la clase Graphics.Por ejemplo:

               PictureBox1.CreateGraphics.DrawLine(ObjetoPen, MiPuntoIncial, MiPuntoFinal)

El código anterior explica lo siguiente: El  objeto PictureBox1 mediante el método CreateGraphics se dá la potestad así mismo de ser el lienzo donde  mostraremos todo lo que vayamos dibujando, es decir se dibujará una línea sobre el PictureBox1 mediante el método DrawLine. En lugar de  Picturebox1 puede usarse Me para dibujarse sobre el formulario.            

'Dibuja un círculo con un relleno de color gold
Me.CreateGraphics.FillEllipse(Brushes.Gold, New Rectangle(New Point(200, 200), New Size(500, 200)))

Entre otros tenemos por ejemplo a los objetos Font y StringFormat, las cuales influyen en el modo en que el objeto Graphics dibuja texto.Un objeto Matrix almacena y manipula la transformación de coordenadas universales de un objeto Graphics, que se utiliza para girar, ajustar la escala y voltear imágenes. 

Dim Matriz As Matrix = New Matrix(System.Math.Sin(45.0R * 3.1416 / 180), _
System.Math.Cos(45.0R * 3.1416 / 180), -System.Math.Cos(45.0R * 3.1416 / 180), _
System.Math.Sin(45.0R * 3.1416 / 180), 0.0F, 0.0F)

					

Enumeraciones: GDI+ define varias enumeraciones, que son colecciones de constantes relacionadas.Por ejemplo, la enumeración pens contiene los elementos Blue, Red, Green y otros, que especifican colores que pueden utilizarse para definir el color del lápiz.

Me.CreateGraphics.DrawLines(Pens.Blue, New Point() _
{New Point(100, 50), New Point(150, 75), New Point(200, 15), New Point(200, 168)})

Estructuras:  GDI+ proporciona varias estructuras (por ejemplo, Rectangle, Point y Size) para organizar datos de gráficos. Además, algunas clases sirven principalmente como tipos de datos estructurados. Por ejemplo, la clase BitmapData es una clase auxiliar de la clase Bitmap, y la clase PathData es una clase auxiliar de la clase GraphicsPath.  

'rellena un cuadrado
PictureBox1.CreateGraphics.FillRectangle(New SolidBrush(Color.BurlyWood), _
New Rectangle(New Point(10, 10), New Size(300, 100)))
 

Los servicios de GDI+ que se exponen a través de un conjunto de clases administradas, se agrupan en tres categorías:

 Gráficos vectoriales 2D: Se refiere al dibujo de líneas, curvas y figuras( tipos primitivos ) que se especifican mediante conjuntos de puntos en un sistema de coordenadas. Por ejemplo:

Una línea recta puede especificarse mediante sus dos extremos: 

         ' Especificamos el lapiz con el que dibujaremos la recta
         Dim Lapiz As Pen = New Pen(Color.Blue) 'definimoa además el color
         ' Creamos los puntos o extremos de la recta
         Dim PuntoIncial As Point = New Point(10, 10)
         Dim PuntoFinal As Point = New Point(300, 300)
         'Finalmente dibujamos la línea...sobre un PictureBox
         PictureBox1.CreateGraphics.DrawLine(Lapiz, PuntoIncial, PuntoFinal)

Un rectángulo puede especificarse mediante un lápiz con el que dibujaremos, un punto que indique la ubicación del borde superior izquierdo y un par de números que indiquen el ancho y el alto. 

'Creamos el lápiz de color RoyalBlue y de tamaño 4
Dim Lapiz As New Pen(Color.RoyalBlue, 4)
Dim PuntoBordeSuperiorIzquierdo As Point = New Point(50, 50)  Dim Ancho As Integer = 100
Dim Alto As Integer = 179
 'Dibujamos sobre el formulario
Me.CreateGraphics.DrawRectangle(Lapiz, New Rectangle(PuntoBordeSuperiorIzquierdo, New Size(Ancho, Alto)))

Un trazado simple puede especificarse mediante una matriz de puntos que se van a conectar mediante líneas rectas.

Me.PictureBox1.CreateGraphics.DrawPolygon(Pens.Red, New Point() {New Point(150, 150), _
New Point(100, 100), New Point(150, 50), New Point(250, 150), New Point(300, 100), New Point(250, 50)}

Una curva spline de Bézier es una curva sofisticada, especificada por cuatro puntos de control.

Me.PictureBox1.CreateGraphics.DrawBezier(New Pen(Color.Red, 2), New Point(10, 30), _
New Point(10, 250), New Point(140, 50), New Point(300, 300))

Imágenes:  Existen tipos de imágenes que no se pueden o son muy difíciles de mostrar con las técnicas de gráficos vectoriales. Por ejemplo:

Tipografía: Se ocupa de la presentación de texto en diversidad de fuentes, tamaños y estilos. GDI+ proporciona una gran compatibilidad para esta tarea tan compleja. Una de las nuevas características de GDI+ es la función de alisado subpíxel, que proporciona una apariencia más regular al texto que se muestra en una pantalla LCD.


Espacios de nombres usados en el código de este artículo:

Imports System.Drawing
Imports System.Drawing.Drawing2D

 No olvides de darme tu voto en PanoramaBox, ya que es una manera de animarme a seguir compartiendo contigo lo que voy aprendiendo. Gracias.

"....Un hombre sin metas ni propósitos es como un barco sin timón. Es tiempo de trazar una ruta y poner todo de tu parte para alcanzar tus sueños, solo así lograrás la satisfacción y la dicha personal" (Percy Reyes)


ir al índice