CLASES Y ESTRUCTURAS MS IMPORTANTES DE NAMESPACE SYSTEM.DRAWING.
Introduccin GDI+ es la evolucin de GDI, que resultaba compleja de utilizar. En Visual Studio .Net, se puede decir que Microsoft ha cuidado, simplificado y mejorado la manera de trabajar con objetos grficos.
El namespace System.Drawing proporciona acceso a la funcionalidad bsica del GDI+. Adems se proporcionan otras clases y estructuras en los namespace System.Text, System.Printing, System.Imaging, System,Drawing2D y System.Design. Con esto Microsoft ha simplificado el uso de grficos de formas simples como lneas, curvas hasta diseo de grficos complejos como cubos En el presente informe mostramos como manejar esta clase y cuando es mejor evitarla. System.Drawing (Espacio de nombres) La clase Graphics proporciona mtodos para dibujar en el dispositivo de pantalla. Clases como Rectangle y Point encapsulan primitivos de GDI+. La clase Pen se utiliza para dibujar lneas y curvas, mientras que las clases derivadas de la clase abstracta Brush se utilizan para rellenar el interior de las formas. Grhapics encapsula las superficies de dibujo de los formularios. Antes de dibujar cualquier objeto grfico un punto, una elipse o un rectngulo, etc. es necesario crear u obtener el objeto Graphics de la superficie. En general, se utiliza el evento Paint del formulario para obtener una referencia al objeto Graphics del formulario porque cuando ocurre ese evento se le pasa como argumento al mtodo manejador un objeto de la clase PaintEventArgs que tiene una propiedad que tambin se llama Graphics que devuelve el objeto Graphics del formulario.
private void formulario_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphis; // Codigo ... } PRINCIPALES CLASES BITMAP Encapsula mapas de bits de GDI+, que estn formados por los datos de pxeles de una imagen de grficos y sus atributos. Bitmap es un objeto que se utiliza para trabajar con imgenes definidas mediante datos de pxeles.
BitmapSuffixInSameAssemblyAttribute Especifica que, al interpretar ToolboxBitmapAttribute las declaraciones, el ensamblado debe buscar los recursos indicados en el mismo ensamblado, pero con el BitmapSuffix anexado al nombre del archivo declarado el valor de configuracin.
BitmapSuffixInSatelliteAssemblyAttribute Especifica que, al interpretar ToolboxBitmapAttribute las declaraciones, el ensamblado debe buscar los recursos indicados en un ensamblado satlite, pero con el BitmapSuffix anexado al nombre del archivo declarado el valor de configuracin.
BRUSH Define los objetos que se utilizan para rellenar formas de grficos, por ejemplo rectngulos, elipses, grficos circulares y rutas.
Brushes Pinceles de todos los colores estndar. Esta clase no puede heredarse.
BufferedGraphics Proporciona un bfer grfico para el doble bfer.
BufferedGraphicsContext Proporciona los mtodos para crear bferes de grficos que se pueden utilizar para el almacenamiento en doble bfer. BufferedGraphicsManager Proporciona acceso al principal objeto de contexto grfico almacenado en bfer para el dominio de aplicacin.
ColorConverter Convierte colores de un tipo de datos a otro. Se obtiene acceso a esta clase a travs de TypeDescriptor.
ColorTranslator Convierte colores a y de estructuras Color GDI+. Esta clase no puede heredarse.
Font Define un formato concreto para el texto, incluidos el nombre de fuente, el tamao y los atributos de estilo. Esta clase no puede heredarse.
FontConverter Convierte objetos Font de un tipo de datos a otro.
FontConverter.FontNameConverter Infraestructura FontConverter.FontNameConverter es un convertidor de tipos que se utiliza para Convertir un nombre de fuente en otras representaciones y viceversa.
FontConverter.FontUnitConverter Infraestructura. Convierte unidades de fuente en otros tipos de unidad y viceversa.
FontFamily Define un grupo de tipos de letra que tienen un diseo bsico parecido y algunas diferencias de estilo. Esta clase no puede heredarse.
Graphics Encapsula una superficie de dibujo de GDI+. Esta clase no puede heredarse.
Icon Representa un icono de Windows, que es una pequea imagen de mapa de bits que se usa para representar un objeto. Los iconos se pueden considerar como mapas de bits transparentes, aunque su tamao lo determina el sistema.
IconConverter Convierte objetos Icon de un tipo de datos en otro. Se tiene acceso a esta clase mediante el objeto TypeDescriptor.
Image Clase base abstracta que proporciona funcionalidad para las clases descendentes
Bitmap y Metafile.
ImageAnimator Da animacin a una imagen que tiene marcos basados en tiempo.
ImageConverter ImageConverter es una clase que se puede utilizar para convertir objetos Image de un tipo de datos a otro. Se tiene acceso a esta clase mediante el objeto
TypeDescriptor.
ImageFormatConverter: ImageFormatConverter es una clase que se puede utilizar para convertir objetos ImageFormat de un tipo de datos a otro. Se tiene acceso a esta clase mediante el objeto TypeDescriptor.
Pen Define un objeto utilizado para dibujar lneas y curvas. Esta clase no puede heredarse.
Pens Lpices de todos los colores estndar. Esta clase no puede heredarse.
PointConverter Convierte objetos Point de un tipo de datos en otro.
RectangleConverter Convierte rectngulos de un tipo en otro tipo. Se obtiene acceso a esta clase a travs de TypeDescriptor.
Region Describe el interior de una forma grfica formada por rectngulos y rutas. Esta clase no puede heredarse.
SizeConverterSizeConverter es una clase que se utiliza para convertir un tipo de datos en otro. Se tiene acceso a esta clase mediante el objeto TypeDescriptor.
SizeFConverter Convierte el tipo de los objetos SizeF en otro.
SolidBrush Define un pincel de un solo color. Los pinceles se utilizan para rellenar formas de grficos, por ejemplo rectngulos, elipses, grficos circulares y rutas. Esta clase no puede heredarse.
StringFormat Encapsula informacin de diseo del texto (como alineacin, orientacin y tabulaciones), manipulaciones de presentacin (como insercin de puntos suspensivos y sustitucin de dgitos nacionales) y caractersticas de OpenType. Esta clase no puede heredarse.
SystemBrushes Cada una de las propiedades de la clase
SystemBrushes es una estructura SolidBrush que es el color de un elemento de presentacin de Windows.
SystemColors Cada una de las propiedades de la clase
SystemColors es una estructura Color que es el color de un elemento de presentacin de
Windows.
SystemFonts Especifica las fuentes que se utilizan para mostrar texto en los elementos representados de Windows.
SystemIcons Cada una de las propiedades de la clase SystemIcons es un objeto Icon de los iconos de todo del sistema de Windows. Esta clase no puede heredarse.
SystemPens Cada una de las propiedades de la clase SystemPens es un objeto Pen que es el color de un elemento de presentacin de Windows y tiene un ancho de 1 pxel.
TextureBrush Cada una de las propiedades de la clase
TextureBrush es un objeto Brush que utiliza una imagen para rellenar el interior de una forma. Esta clase no puede heredarse.
ToolboxBitmapAttribute Le permite especificar un icono para representar un control en un contenedor, como el Diseador de formularios de Microsoft Visual Studio.
ESTRUCTURAS
CharacterRange Especifica un intervalo de posiciones de caracteres en una cadena.
Color Representa un color de ARGB (alfa, rojo, verde, azul).
Point Representa un par ordenado de coordenadas enteras x e y que define un punto en un plano bidimensional.
PointF Representa un par ordenado de coordenadas x e y de punto flotante que define un punto en un plano bidimensional.
Rectangle Almacena un conjunto de cuatro enteros que representan la posicin y el tamao de un rectngulo.
RectangleF Almacena un conjunto de cuatro nmeros de punto flotante que representan la posicin y tamao de un rectngulo. Para las funciones de regin ms avanzadas, utilice un objeto Region.
Size Almacena un par ordenado de enteros, que especifican Height y Width.
SizeF Almacena un par de nmeros de punto flotante ordenados, normalmente el ancho y el alto de un rectngulo.
Por qu no debo utilizar las clases de System.Drawing en aplicaciones ASP.NET Con cierta frecuencia tenemos casos de soporte de aplicaciones ASP.NET que dan problemas debido al uso de las clases de System.Drawing. El uso de del namespace System.Drawing no est soportado desde una aplicacin ASP.NET (o cualquier otro servicio de Windows), lo cual pilla por sorpresa a ms de uno. El motivo es que System.Drawing utiliza las APIs de GDI/GDI+ que no han sido diseadas para ejecutarse en un entorno de alta concurrencia y adems requieren ejecutarse una sesin de Windows interactiva. Esta limitacin est documentada en la referencia de MSDN para System.Drawing y GDI+.
En Windows Server 2003, Windows XP y anteriores, podamos utilizar parte de la funcionalidad de GDI desde una aplicacin ASP.NET siempre y cuando no se produjera interaccin con el monitor ni con ningn driver de video. Es decir, se podan utilizar objetos simples (lneas, formas en 2D, colores slidos, etc.) de forma soportada. Grficos ms complejos (por ejemplo grficos en 3D) que utilizan GDI+ no estaban soportados en ningn caso, al margen de que la aplicacin ASP.NET aparentemente pudiera llegar a funcionar. En todo caso mi recomendacin es que si no sabes exactamente lo que ests haciendo, no utilices System.Drawing en tus aplicaciones ASP.NET nunca.
En Windows Server 2008 y Windows Vista, dado que los servicios ahora corren en la sesin 0 donde no se permite el acceso al driver de video (por diseo del sistema operativo), toda la funcionalidad de GDI+ deja de funcionar por completo ya que requiere acceso a dicho driver. En cierto modo esto es una ventaja ya que as no tenemos la falsa percepcin de que nuestra aplicacin est funcionando correctamente cuando no es as.
Pero entonces cul es la forma correcta de crear/manipular grficos desde una aplicacin ASP.NET? No existe una respuesta sencilla, estas son algunas alternativas que se me ocurren:
Desarrollar un ejecutable separado que corra en una sesin interactiva de Windows. Este proceso ser el encargado de la generacin/manipulacin de grficos, y se comunicar con el proceso de IIS mediante IPC (interprocess communication). Migrar la lgica de generacin de grficos a una aplicacin Silverlight (particularmente interesante en este aspecto es Silverlight 3, que est actualmente en Beta 1).
Adicionalmente, y aunque no manipulemos grficos en nuestra aplicacin ASP.NET, todo el cdigo de servidor relacionado con la interfaz grfica de nuestra aplicacin web debe moverse a su equivalente en HTML/CSS en lugar de utilizar cdigo de servidor. Es decir, por ejemplo es aconsejable sustituir este tipo de cdigo de servidor: MyBase.BackColor = Drawing.Color.FromArgb(255, 255, 255)
Por su equivalente en HTML/CSS combinado con cdigo de servidor:
- Las clases de System.Drawing deben manipular en ambientes compatibles de recursos de software (sistema operativo, navegador), hardware, monitor, tarjeta grfica, memoria, procesador, para que su visualizacin se correcta y uniforme en las maquinas clientes. Esto debe ser probado para no llevarnos sorpresas