GDI+ (Parte II) : Creando objetos Graphics, Pen y Font, y manejando las estructuras Pens y Color

Dada la base introductoria acerca de GDI+( Vea CAPÍTULO I ), donde habíamos estudiado conceptos importantes relacionados a GDI+, empezaré a partir de este artículo a profundizar cada uno de los componentes de GDI+ (la tecnología contenida en .NET Frameworks con la que se pueden generar salidas gráficas, textuales y trabajo con mapas de bits e imágenes). Una de las cosas que habíamos mencionado es que toda la funcionalidad de GDI+ está en encapsulada en el assembly System.Drawing.dll. Por otra parte, todas las clases GDI+ classes se encuentran dentro de los namespaces System.Drawing, System.Drawing2D, System.Text, System.Design, System.Imaging, System.PrintingSystem.Internal . Ahora sí, empezemos detallando la clase Graphics.

LA  CLASE GRAPHICS  

Cuando usted se propone a dibujar una línea o cualquier forma manualmente, pues necesitará de un espacio donde hacerlo, como por ejemplo: un trozo de papel, una región de pared, o cualquier superficie de dibujo que esté en condiciones como para representar nuestras imágenes o creaciones. Pues bien, estas ideas llevémoslo a la práctica, es decir, a la parte programática. A ese trozo de papel, región de pared ... se llama lienzo, y en .NET  este lienzo está representado mediante la clase Graphics. Entonces, la clase Graphics viene a ser el lienzo donde expresaremos nuestro arte.

La clase Graphics es la base de la funcionalidad de GDI+, en otras palabras, 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. Algo a resaltar acerca del clase Graphics es que éste carece de constructor público, negándonos de esta manera la posibilidad de instanciar un objeto Graphics con la palabra clave New,¿Qué pena verdad? pues no os preucupéis, ya que todo tiene su porqué, como veremos más adelante. Sigamos... Podemos crear nuestro objeto Graphics de diversas maneras, como por ejemplo:

'creamos un objeto Graphics en el formulario
Dim myLienzoForm As Graphics = Me.CreateGraphics

'creamos un objeto Graphics en un PictureBox
Dim myLienzoPictureBox As Graphics = PictureBox1.CreateGraphics

 'creamos un objeto Graphics en un control
Dim myLienzoControl As Graphics = Button1.CreateGraphics

Existe otra manera de crear un objeto Graphics, pero tiene que tener en cuenta algunos riesgos al hacerlo, ya que el repintado de la imagen puede verse afectado debido a la complejidad de esta.

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _ Handles

MyBase.Paint Dim myGraphics As Graphics = e.Graphics

End Sub


REFERENCIA Vea algo más acerca de la clase Graphics

NOTA: En algún momento deseaba que cuando se cargue el formulario se dibujara un gráfico, para la cual insertaba el código en el evento Load. Cuando corría la aplicación nunca observaba el gráfico dibujado, era claro que algo andaba mal, pues todo era incorrecto.  Ahora entiendo porque no era posible realizarlo. Pues me di cuenta que esto, era debido a que el evento Paint del formulario se levantaba después del evento Load, por eso no podía trabajar este código en este evento Load.  Es decir, el formulario se pintaba sin dibujar el gráfico. Para solucionar este problemilla, opté por escribir el código en el evento Paint del formulario, siempre que quisiese graficar cuando el formulario se cargue. Ejemplo:

Este código no mostrará resultado alguno.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load

    Me.CreateGraphics.DrawLines(New Pen(Color.Blue, 4), New Point() {New Point(34, 56), New Point(74, 93), New Point(56, 12)})

End Sub

Este código dibuja dos segmentos conectados por la matriz de puntos (34,56), (74,93) y (56,12)

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
    Handles MyBase.Paint

    Me.CreateGraphics.DrawLines(New Pen(Color.Blue, 4),    New  Point()
    {New Point(34, 56), New Point(74, 93), New Point(56, 12)})

End Sub

Ver artículo completo publicado en el www.elguille.info 

Percy Reyes.

Published 25/4/2007 13:53 por Percy Reyes
Comparte este post:
http://geeks.ms/blogs/ozonicco/archive/2007/04/25/gdi-parte-ii-creando-objetos-graphics-pen-y-font-y-manejando-las-estructuras-pens-y-color.aspx