Contenido

Anuncio
Textos Universitarios / Serie Docencia
________________________________________________________________________
Contenido
Introducción
Capítulo 1
GDI+: La nueva Generación en Interfases gráficas
1.1 Superficies de dibujo y sistema de Coordenadas en GDI+
1.1.1 Superficies de dibujo
1.1.2 Sistemas de Coordenadas
1.2 Estructuras Esenciales
1.2.1 Puntos bidimensionales
1.2.1.1 Constructores públicos
1.2.1.2 Campos públicos
1.2.1.3 Propiedades publicas
1.2.1.4 Métodos públicos
1.2.1.5 Operadores públicos y conversiones de tipo
1.2.1.6 Métodos protegidos
1.2.2 Estructura Size (tamaños)
1.2.2.1 Constructores públicos
1.2.2.2 Campos públicos
1.2.2.3 Propiedades publicas
1.2.2.4 Métodos públicos
1.2.2.5 Operadores públicos y conversión de tipos
1.2.2.6 Métodos protegidos
1.2.3 Estructura Rectangle (rectángulos)
1.2.3.1 Constructores públicos
1.2.3.2 Campos públicos
1.2.3.3 Propiedades publicas
1.2.3.4 Métodos públicos
1.2.3.5 Operadores públicos
1.2.3.6 Métodos protegidos
1.2.4 Estructura Color (colores)
1.2.4.1 Campos públicos
1.2.4.2 Propiedades publicas
1.2.4.3 Métodos públicos
1.2.4.4 Operadores públicos
1.2.4.5 Métodos protegidos
1.2.5 Clase TypeConverter
1.2.5.1 Constructores públicos
1.2.5.2 Métodos públicos
1.2.6 Clase ColorConverter
1.2.6.1 Constructores públicos
1.2.6.2 Métodos públicos
1.2.6.3 Métodos protegidos
1.2.7 Clase ColorTranslator
1.2.7.1 Métodos públicos
3
Jenaro C. Paz
________________________________________________________________________
Capítulo 2
Su primera aplicación GDI+ para Web
2.1 Imágenes, mapas de bits y metarchivos
2.1.1 Clase Image
2.1.1.1 Propiedades públicas
2.1.1.2 Métodos públicos
2.1.1.3 Métodos protegidos
2.1.2 Imágenes de trama (bitmaps)
2.1.2.1 Clase Bitmap
2.1.2.1.1 Constructores públicos
2.1.2.1.2 Propiedades publicas
2.1.2.1.3 Métodos públicos
2.1.2.1.4 Métodos protegidos
2.1.2.2 Tipos de mapas de bits
2.1.2.3 Formatos de archivos de gráficos
2.1.2.3.1 BMP (Bit MaP, mapa de bits)
2.1.2.3.2 GIF (Graphics Interchange Format, formato de intercambio de
gráficos)
2.1.2.3.3 JPEG (Joint Photographic Experts Group, grupo conjunto de
expertos en fotografía)
2.1.2.3.4 EXIF (Exchangeable Image File, archivo de imagen
intercambiable)
2.1.2.3.5 PNG (Portable Network Graphics, gráficos de red portátiles)
2.1.2.3.6 TIFF (Tag Image File Format, formato de archivo de imágenes
con etiquetas)
2.1.3 Clase Metafile
2.1.3.1 Constructores públicos
2.1.3.2 Propiedades publicas
2.1.3.3 Métodos públicos
2.1.3.4 Métodos protegidos
2.1.3.5 Información general acerca de gráficos vectoriales
2.2 Técnica para la generación de gráficos en línea en aplicaciones Web
Capítulo 3
Objetos gráficos
3.1 Clase Graphics
3.1.1 Propiedades públicas
3.1.2 Métodos públicos
3.1.2.1 Métodos públicos para el dibujo
3.1.2.1.1 Dibujando imágenes mediante una forma Web
3.1.2.1.1.1 Generación del lienzo de dibujo definido por su color y su
tamaño
3.1.2.1.1.2
Dibujando líneas sobre una lienzo
3.1.2.1.1.3
Dibujando rectángulos sobre un lienzo
3.1.2.1.1.4
Dibujando elipses y arcos sobre un lienzo
3.1.2.1.1.5
Dibujando polígonos sobre un lienzo
3.1.2.1.1.6
Dibujando curvas sobre un lienzo
3.1.2.1.1.7
Dibujando curvas Bézier sobre un lienzo
4
Textos Universitarios / Serie Docencia
________________________________________________________________________
3.1.2.1.1.8
Dibujando trazados sobre un lienzo
3.1.2.1.1.9
Dibujando iconos sobre un lienzo
3.1.2.1.1.10 Dibujando imágenes sobre un lienzo
3.1.2.1.1.11 Dibujando pasteles sobre un lienzo
3.1.2.1.1.12 Dibujando cadenas sobre un lienzo
3.1.2.2 Métodos Públicos para rellenar
3.1.2.2.1 Rellenando el interior de formas dibujadas en un lienzo
3.1.2.2.1.1 Rellenando curvas cerradas
3.1.2.2.1.2 Rellenando elipses
3.1.2.2.1.3 Rellenando trazos
3.1.2.2.1.4 Rellenando pasteles
3.1.2.2.1.5 Rellenando polígonos
3.1.2.2.1.6 Rellenando un rectángulo
Capítulo 4
Pinceles y Plumas
4.1 Uso de pinceles en GDI+
4.1.1 La clase Brush
4.1.1.1 Métodos públicos
4.1.1.2 Métodos protegidos
4.1.2 La clase SolidBrush
4.1.2.1 Constructores públicos
4.1.2.2 Propiedades públicas
4.1.2.3 Métodos públicos
4.1.2.4 Métodos protegidos
4.1.2.5 El uso de SolidBrush en una forma Web
4.1.3 La clase TextureBrush
4.1.3.1 Constructores públicos
4.1.3.2 Propiedades publicas
4.1.3.3 Métodos públicos
4.1.3.4 Métodos protegidos
4.1.3.5 El uso de TextureBrush en una forma Web
4.1.4 La clase HatchBrush
4.1.4.1 Constructores públicos
4.1.4.2 Propiedades públicas
4.1.4.3 Métodos públicos
4.1.4.4 Métodos protegidos
4.1.4.5 El uso de HatchBrush en una forma Web
4.1.5 La clase LinearGradientBrush
4.1.5.1 Constructores públicos
4.1.5.2 Propiedades públicas
4.1.5.3 Métodos públicos
4.1.5.4 Métodos protegidos
4.1.5.5 El uso de LinearGradientBrush en una forma Web
4.1.6 La clase PathGradientBrush
4.1.6.1 Constructores públicos
4.1.6.2 Propiedades públicas
4.1.6.3 Métodos públicos
5
Jenaro C. Paz
________________________________________________________________________
4.1.6.4 Métodos protegidos
4.1.6.5 El uso de PathGradientBrush en una forma Web
4.2 Uso de plumas en GDI+
4.2.1 Clase Pens
4.2.1.1 Propiedades públicas
4.2.2 Clase Pen
4.2.2.1 Constructores públicos
4.2.2.2 Propiedades públicas
4.2.2.3 Métodos públicos
4.2.2.4 Métodos protegidos
4.2.2.5 El uso de diferente tipo de plumas en una forma Web
4.3 Transformaciones con plumas
4.4 Transformaciones con pinceles
4.4.1 Transformaciones para TextureBrush
4.4.2 Transformaciones para LinearGradientBrush
4.4.3 Transformaciones para PathGradientBrush
4.5 Plumas y pinceles del Sistema
4.5.1 Colores del Sistema
4.5.1.1 Clase SystemColors
4.5.1.1.1 Propiedades públicas
4.5.2 Plumas del Sistema
4.5.2.1 Clase SystemPens
4.5.2.1.1 Propiedades públicas
4.5.3 Pinceles del Sistema
4.5.3.1 Clase SystemBrushes
4.5.3.1.1 Propiedades públicas
Capítulo 5
Fuentes y Texto
5.1 Trabajando con Fuentes
5.1.1 Clase FontFamily
5.1.1.1 Constructores públicos
5.1.1.2 Propiedades públicas
5.1.1.3 Métodos públicos
5.1.1.4 Métodos protegidos
5.1.2 Clase Font
5.1.2.1 Constructores públicos
5.1.2.2 Propiedades públicas
5.1.2.3 Métodos públicos
5.1.2.4 Métodos protegidos
5.1.3 Miembros de la enumeración FontStyle
5.1.4 Miembros de la enumeración GraphicsUnit
5.2 Trabajando con Cadenas de Caracteres
5.2.1 Dibujando Cadenas de caracteres con formato
5.2.1.1 Clase StringFormat
5.2.1.1.1 Constructores públicos
5.2.1.1.2 Propiedades públicas
5.2.1.1.3 Métodos públicos
6
Textos Universitarios / Serie Docencia
________________________________________________________________________
5.2.1.1.4 Métodos protegidos
5.2.1.2 Alineación y recorte de Cadenas de caracteres
5.2.1.2.1 Enumeración StringAlignment
5.2.1.2.1.1 Miembros
5.2.1.2.2 Enumeración StringTrimming
5.2.1.2.2.1 Miembros
5.2.1.3 Uso de tabuladores para el texto
5.2.1.4 Formato en el Texto
5.2.1.4.1 Enumeración StringFormatFlags
5.2.1.4.1.1 Miembros
5.2.1.5 Presentación de Texto con calidad
5.2.1.5.1 Enumeración TextRenderingHint
5.2.1.5.1.1 Miembros
5.2.1.6 Transformando Texto
Capítulo 6
Rectángulos, trazados, regiones y recortes
6.1 Dibujo y rellenado de Rectángulos
6.1.1 Enumeración PenAlignment
6.1.1.1 Miembros
6.2 Trazados
6.2.1 Clase GraphicsPath
6.2.1.1 Constructores públicos
6.2.1.2 Propiedades publicas
6.2.1.3 Métodos públicos
6.2.1.4 Métodos protegidos
6.2.2 Recorte con Trazados
6.3 Regiones (Me falta escribir sobre esto)
6.3.1 Clase Region
6.3.1.1 Constructores públicos
6.3.1.2 Métodos públicos
6.3.1.3 Métodos protegidos
6.4 Regiones y recortado
Capítulo 7
Biblioteca de Clases y la generación de Gráficas
7.1 Dibujo de Marcos y Bordes con gLibrary
7.2 Dibujo de cuatro tipos de Gráficas con gImage
7.2.1 Gráficas de Columnas
7.2.2 Gráficas de Líneas
7.2.3 Gráficas de Barra
7.2.4 Gráficas de Columnas en 3D
Capítulo 8
Procesamiento digital de imágenes
8.1 Introducción
8.1.1 Bitmaps (mapas de bits)
8.1.2 Representación vectorial de los colores
8.1.3 Clase BitmapData
7
Jenaro C. Paz
________________________________________________________________________
8.1.3.1 Constructores públicos
8.1.3.2 Propiedades públicas
8.1.3.3 Métodos públicos
8.1.3.4 Métodos protegidos
8.2 Procesamiento de imágenes
8.2.1 Modificación de Color
8.2.1.1 Detección de orillas
8.2.1.2 Escala de grises
8.2.1.3 Inversión
8.2.1.4 Brillo
8.2.1.5 Contraste
8.2.1.6 Modificación de Colores
8.2.2 Modificación de la Imagen
8.2.2.1 Inversión de Imagen
8.2.2.2 Reflexión de Imagen
8.2.2.3 Escalamiento
8.2.2.4 Rotación de Imagen
8.2.2.5 Perspectiva Horizontal
8.2.2.6 Perspectiva Vertical
8.2.2.7 Inclinación Horizontal
8.2.2.8 Inclinación Vertical
8.2.3 generación de efectos por Convolución
8.2.3.1 Borrado Gaussiano (Blur)
8.2.3.2 Emboss
8.2.3.3 Sharpen
8.2.3.4 Smooth
8.2.3.5 Mean Renoval
8.2.3.6 Edge Detection Quick
8.2.3.7 Detección de orillas por Convolución método Sobel
8.2.3.8 Detección de orillas por Convolución método Prewitt
8.2.3.9 Detección de orillas por Convolución método Kirsh
Capítulo 9
Representación matricial de Transformaciones
9.1 Matrices
9.2 Transformaciones con Matrices
9.2.1 Transformaciones Compuestas
9.3 Clase Matriz
9.3.1 Constructores públicos
9.3.2 Propiedades públicas
9.3.3 Métodos públicos
9.3.4 Métodos protegidos
8
Textos Universitarios / Serie Docencia
________________________________________________________________________
Introducción1
Dentro del contexto de las nuevas Tecnologías de Microsoft, para el desarrollo de una
Aplicación Web utilizamos
•
•
•
Framework.NET de Microsoft
Servidor MSSQL, para las bases de datos, tablas y procedimientos almacenados
Visual Studio.NET que es un IDE para el desarrollo de aplicaciones con
tecnologías .NET
El Framework.NET es una nueva plataforma informática que simplifica el desarrollo de
aplicaciones en un entorno altamente distribuido como es Internet. El diseño del
Framework.NET estuvo enfocado a cumplir los objetivos siguientes:
•
•
•
•
•
•
Proporcionar un entorno coherente de programación orientada a objetos, en el que
el código de los objetos se pueda almacenar y ejecutar de forma local, ejecutar de
forma local pero distribuida en Internet o ejecutar de forma remota.
Proporcionar un entorno de ejecución de código que reduzca al máximo posible la
implementación de software y los conflictos de versiones.
Ofrecer un entorno de ejecución de código que garantice la ejecución segura del
mismo, incluso del creado por terceras personas desconocidas o que no son de
plena confianza.
Proporcionar un entorno de ejecución de código que elimine los problemas de
rendimiento de los entornos en los que se utilizan secuencias de comandos o
intérpretes de comandos.
Ofrecer al programador una experiencia coherente entre tipos de aplicaciones muy
diferentes, como las basadas en Windows o en el Web.
Basar toda la comunicación en estándares del sector para asegurar que el código
del Framework.NET se puede integrar con otros tipos de código.
El Framework.NET contiene dos componentes principales: CLR (Common Language
Runtime) y la biblioteca de clases del Framework.NET. El CLR es el fundamento de la
tecnología, el motor de tiempo de ejecución. Se puede considerar como un agente que
administra el código en tiempo de ejecución y proporciona servicios centrales, como la
administración de memoria, la administración de subprocesos y la interacción remota, al
tiempo que aplica una seguridad estricta a los tipos y otras formas de especificación del
código que garantizan su seguridad y solidez. De hecho, el concepto de administración de
código es un principio básico del motor de tiempo de ejecución.
El código destinado al motor de tiempo de ejecución se denomina código administrado, a
diferencia del resto de código, que se conoce como código no administrado. La biblioteca
de clases, el otro componente principal del Framework.NET, es una colección completa
de tipos reutilizables orientada a objetos que se puede emplear para desarrollar
1
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn2.microsoft.com/en-us/library/zw4w595w.aspx junio 3 de 2006
9
Jenaro C. Paz
________________________________________________________________________
aplicaciones que abarcan desde las tradicionales herramientas de interfaz gráfica de
usuario (GUI) o de línea de comandos hasta las aplicaciones basadas en las innovaciones
más recientes proporcionadas por ASP.NET, como los formularios Web Forms y los
servicios Web XML.
El Framework.NET puede alojarse en componentes no administrados que cargan al CLR
en sus procesos e inician la ejecución de código administrado, con lo que se crea un
entorno de software en el que se pueden utilizar características administradas y no
administradas. El Framework.NET no sólo provee varios hosts de tiempo de ejecución,
sino que también se admite el desarrollo de hosts por parte de terceros.
Por ejemplo, ASP.NET aloja el motor de tiempo de ejecución para proporcionar un
entorno de servidor escalable para el código administrado. ASP.NET trabaja directamente
con el motor de tiempo de ejecución para habilitar aplicaciones de ASP.NET y servicios
Web XML, que se tratan más adelante en este tema.
Internet Explorer es un ejemplo de aplicación no administrada que aloja el motor de
tiempo de ejecución (en forma de una extensión de tipo MIME). Al usar Internet
Explorer para alojar el motor de tiempo de ejecución, puede incrustar componentes
administrados o controles de Windows Forms en documentos HTML. Al alojar el motor
de tiempo de ejecución de esta manera se hace posible el uso de código móvil
administrado (similar a los controles de Microsoft® ActiveX®), pero con mejoras
significativas que sólo el código administrado puede ofrecer, como la ejecución
semiconfiable y el almacenamiento en archivos aislado.
En la ilustración siguiente se muestra la relación de CLR y la biblioteca de clases con las
aplicaciones y el sistema en su conjunto. En la ilustración se representa igualmente cómo
funciona el código administrado dentro de una arquitectura mayor.
.NET Framework en contexto
Figura I.1. Framework de Microsoft
10
Textos Universitarios / Serie Docencia
________________________________________________________________________
En las secciones siguientes se describen con más detalle las componentes y características
principales del Framework.NET.
Características del CLR
El Common Language Runtime administra la memoria, la ejecución de subprocesos, la
ejecución de código, la comprobación de la seguridad del código, la compilación y demás
servicios del sistema. Estas características son intrínsecas del código administrado que es
ejecutado por el CLR.
Con respecto a la seguridad, los componentes administrados reciben grados de confianza
diferentes, en función de una serie de factores entre los que se incluye su origen (como
Internet, red empresarial o equipo local). Esto significa que un componente administrado
puede ser capaz o no de realizar operaciones de acceso a archivos, operaciones de acceso
al Registro y otras funciones delicadas, incluso si se está utilizando en la misma
aplicación activa.
El motor de tiempo de ejecución impone seguridad en el acceso al código. Por ejemplo,
los usuarios pueden confiar en que un archivo ejecutable incrustado en una página Web
puede reproducir una animación en la pantalla o reproducir una canción, pero no puede
tener acceso a sus datos personales, sistema de archivos o red. Por ello, las características
de seguridad del motor de tiempo de ejecución permiten que el software legítimo
implementado en Internet sea excepcionalmente rico en contenido.
Además, el motor de tiempo de ejecución impone la solidez del código mediante la
implementación de una infraestructura estricta de comprobación de tipos y código
denominada CTS (Common Type System, Sistema de tipos común). CTS garantiza que
todo el código administrado es auto descriptivo. Los diferentes compiladores de lenguajes
de Microsoft y de terceros generan código administrado que se ajusta a CTS. Esto
significa que el código administrado puede usar otros tipos e instancias administradas, al
tiempo que se aplica inflexiblemente la fidelidad y seguridad de los tipos.
Además, el entorno administrado del motor de tiempo de ejecución elimina muchos
problemas de software comunes. Por ejemplo, el motor de tiempo de ejecución controla
automáticamente la disposición de los objetos, administra las referencias a éstos y los
libera cuando ya no se utilizan. Esta administración automática de la memoria soluciona
los dos errores más comunes de las aplicaciones: la pérdida de memoria y las referencias
no válidas a la memoria.
11
Jenaro C. Paz
________________________________________________________________________
Además, el motor de tiempo de ejecución aumenta la productividad del programador. Por
ejemplo, los programadores pueden crear aplicaciones en el lenguaje que prefieran y
seguir sacando todo el provecho del motor de tiempo de ejecución, la biblioteca de clases
y los componentes escritos en otros lenguajes por otros programadores. El proveedor de
un compilador puede elegir destinarlo al motor de tiempo de ejecución. Los compiladores
de lenguajes que se destinan al Framework.NET hacen que las características del
Framework.NET estén disponibles para el código existente escrito en dicho lenguaje, lo
que facilita enormemente el proceso de migración de las aplicaciones existentes.
Aunque el motor de tiempo de ejecución está diseñado para el software del futuro,
también es compatible con el software actual y el software antiguo. La interoperabilidad
entre el código administrado y no administrado permite que los programadores continúen
utilizando los componentes COM y las DLL que necesiten.
El motor de tiempo de ejecución está diseñado para mejorar el rendimiento. Aunque
Common Language Runtime proporciona muchos servicios estándar de motor de tiempo
de ejecución, el código administrado nunca se interpreta. Una característica denominada
compilación JIT (Just-In-Time) permite ejecutar todo el código administrado en el
lenguaje máquina nativo del sistema en el que se ejecuta. Mientras tanto, el administrador
de memoria evita que la memoria se pueda fragmentar y aumenta la zona de referencia de
la memoria para mejorar aún más el rendimiento.
Por último, el motor de tiempo de ejecución se puede alojar en aplicaciones de servidor
de gran rendimiento, como Microsoft® SQL Server™ e IIS (Servicios de Internet
Information Server). Esta infraestructura permite utilizar código administrado para
escribir su lógica de negocios, al tiempo que se disfruta del rendimiento superior de los
servidores empresariales que puedan alojar al motor de tiempo de ejecución.
Biblioteca de clases de .NET Framework
La biblioteca de clases del Framework.NET es una colección de tipos reutilizables que se
integran estrechamente con el CLR. La biblioteca de clases es orientada a objetos, lo que
proporciona tipos de los que su propio código administrado puede derivar funcionalidad.
Esto ocasiona que los tipos de .NET Framework sean sencillos de utilizar y reduce el
tiempo asociado con el aprendizaje de las nuevas características del Framework.NET.
Además, los componentes de terceros se pueden integrar sin dificultades con las clases
del Framework.NET.
Por ejemplo, la colección de clases de del Framework.NET implementan un conjunto de
interfases que se pueden usar para desarrollar sus propia colección de clases. Éstas se
combinarán fácilmente con las clases de Framework.NET.
12
Textos Universitarios / Serie Docencia
________________________________________________________________________
Como en cualquier biblioteca de clases orientada a objetos, los tipos de Framework.NET
permiten realizar diversas tareas comunes de programación, como son la administración
de cadenas, recopilación de datos, conectividad a bases de datos y acceso a archivos.
Además de estas tareas habituales, la biblioteca de clases incluye tipos adecuados para
diversos escenarios de desarrollo especializados. Por ejemplo, puede utilizar
Framework.NET para desarrollar los siguientes tipos de aplicaciones y servicios:
•
•
•
•
•
Aplicaciones de consola
Aplicaciones GUI de Windows (Windows Forms)
Aplicaciones de ASP.NET
Servicios Web XML
Servicios de Windows
Por ejemplo, las clases de Windows Forms son un conjunto completo de tipos
reutilizables que simplifican enormemente el desarrollo de interfaces GUI para Windows.
Si escribe una aplicación Web Form de ASP.NET, puede utilizar las clases de Web
Forms.
Desarrollo de aplicaciones cliente
Las aplicaciones cliente constituyen lo más parecido a una aplicación de estilo tradicional
en la programación basada en Windows. En este tipo de aplicaciones se muestran
ventanas o formularios en el escritorio, lo que permite al usuario realizar una tarea. Entre
las aplicaciones cliente se incluyen los procesadores de texto y las hojas de cálculo,
además de aplicaciones de negocios tales como herramientas con entrada de datos, de
informes, etcétera. En las aplicaciones cliente se suelen emplear ventanas, menús,
botones y otros elementos de la interfaz gráfica de usuario, y suelen tener acceso a
recursos locales como el sistema de archivos y a dispositivos periféricos como las
impresoras.
Otro tipo de aplicación cliente es el tradicional control ActiveX (reemplazado ahora por
el control administrado de Windows Forms) implementado en Internet como una página
Web. Esta aplicación es muy parecida a otras aplicaciones cliente: se ejecuta de forma
nativa, tiene acceso a los recursos locales e incluye elementos gráficos.
En el pasado, los programadores creaban esas aplicaciones mediante C o C++ en
combinación con MFC (Microsoft Foundation Classes) o con un entorno RAD (Rapid
Application Development, desarrollo rápido de aplicaciones) como Microsoft® Visual
Basic®. En Framework.NET se incorporan aspectos de estos productos, que siguen
existiendo, en un único entorno de desarrollo coherente que simplifica de forma
espectacular el desarrollo de las aplicaciones cliente.
13
Jenaro C. Paz
________________________________________________________________________
Las clases de Windows Forms contenidas en Framework.NET están diseñadas para
utilizarse en el desarrollo de GUI. Puede crear ventanas, botones, menús, barras de
herramientas y demás elementos de pantalla fácilmente con la flexibilidad requerida para
adaptarse a la evolución de las necesidades de negocio.
Por ejemplo, .NET Framework proporciona propiedades simples para ajustar los atributos
visuales asociados con los formularios. En determinadas circunstancias, el sistema
operativo subyacente no permite cambiar estos atributos directamente y, entonces,
Framework.NET vuelve a crear los formularios de forma automática. Ésta es una de las
múltiples maneras en que Framework.NET integra la interfaz del programador, con lo
que la creación de código resulta más sencilla y más coherente.
A diferencia de los controles ActiveX, los controles de Windows Forms tienen acceso al
equipo de del usuario con semiconfianza. Esto significa que el código binario o que se
ejecuta de forma nativa puede tener acceso a algunos de los recursos del sistema del
usuario (como elementos de la GUI y acceso limitado a los archivos) sin tener acceso ni
comprometer los demás recursos. Debido a la seguridad de acceso a código, muchas
aplicaciones que antes era necesario instalar en el sistema de un usuario, ahora se pueden
implementar con seguridad a través del Web. Las aplicaciones pueden tener las
características de una aplicación local a la vez que se implementan como una página
Web.
Desarrollo de aplicaciones de servidor
Las aplicaciones de servidor en entornos administrados se implementan mediante hosts
de tiempo de ejecución. Las aplicaciones no administradas alojan al CLR, que permite al
código administrado controlar el comportamiento del servidor. Este modelo proporciona
todas las características de Common Language Runtime y la biblioteca de clases, además
de obtener el rendimiento y la escalabilidad del servidor anfitrión.
En la ilustración siguiente se muestra un esquema de red básico donde se ejecuta código
administrado en diferentes entornos de servidor. Los servidores como IIS y SQL Server
pueden realizar operaciones estándar mientras la lógica de la aplicación se ejecuta en el
código administrado.
14
Textos Universitarios / Serie Docencia
________________________________________________________________________
Código administrado en el servidor
Figura I.2. Código administrado
ASP.NET es el albergue que permite a los programadores utilizar Framework.NET en las
aplicaciones Web. Sin embargo, ASP.NET no es sólo un albergue del motor de tiempo de
ejecución: se trata de una arquitectura completa para el desarrollo de sitios Web y de
objetos distribuidos en Internet mediante código administrado. Los formularios Web y los
servicios Web XML utilizan el IIS y ASP.NET como mecanismos de publicación de las
aplicaciones, ambos disponen de una colección de clases de soporte en el
Framework.NET.
Los servicios Web XML, que constituyen una evolución importante de la tecnología
basada en el Web, son componentes distribuidos de aplicaciones de servidor similares a
los sitios Web. Sin embargo, a diferencia de las aplicaciones basadas en el Web, los
componentes de servicios Web XML no tienen interfaz de usuario y no están orientados a
exploradores como Internet Explorer y Netscape Navigator. En su lugar, los servicios
Web XML constan de componentes de software reutilizables diseñados para que los
utilicen otras aplicaciones, como aplicaciones cliente tradicionales, aplicaciones basadas
en el Web o, incluso, otros servicios Web XML. Como resultado, la tecnología de
servicios Web XML está impulsando de manera rápida el desarrollo y la implementación
de aplicaciones hacia el entorno altamente distribuido de Internet.
Si ha utilizado versiones anteriores de la tecnología ASP, apreciará de inmediato las
mejoras que ofrecen ASP.NET y Web Forms. Por ejemplo, puede desarrollar páginas de
Web Forms en cualquier lenguaje compatible con Framework.NET. Además, ya no es
necesario que el código comparta el mismo archivo con el texto HTTP (aunque puede
seguir haciéndolo, si lo prefiere). Los formularios Web se ejecutan en lenguaje máquina
nativo porque, al igual que todas las aplicaciones administradas, sacan todo el provecho
del motor de tiempo de ejecución. En cambio, las páginas ASP no administradas siempre
utilizan secuencias de comandos e intérpretes de comandos. El desarrollo de páginas de
ASP.NET es más rápido, más funcional y más sencillo que el desarrollo de páginas ASP
no administradas, porque interactúan con el motor de tiempo de ejecución como una
aplicación administrada.
15
Jenaro C. Paz
________________________________________________________________________
El Framework.NET proporciona también una colección de clases y herramientas para
ayudar al desarrollo y uso de las aplicaciones de servicios Web XML. Los servicios Web
XML se basan en estándares como SOAP (un protocolo de llamadas a procedimientos
remotos), XML (un formato de datos extensible) y WSDL (el Lenguaje de descripción de
servicios Web). En Framework.NET se utilizan estos estándares para fomentar la
interoperabilidad con soluciones que no son de Microsoft.
Por ejemplo, la herramienta de WSDL incluida en Framework.NET SDK puede consultar
un servicio Web XML publicado en el Web, analizar su descripción WSDL y producir
código fuente de C# o Visual Basic que la aplicación puede utilizar para convertirse en
cliente del servicio Web XML en cuestión. El código fuente puede crear clases derivadas
de las clases de la biblioteca de clases que controlan completamente la comunicación
subyacente mediante SOAP y análisis de XML. Aunque puede utilizar la biblioteca de
clases para usar los servicios Web XML directamente, la herramienta WSDL y las demás
herramientas incluidas en el SDK facilitan el trabajo de desarrollo con Framework.NET.
Si desarrolla y publica su propio servicio Web XML, Framework.NET proporciona un
conjunto de clases que cumplen todos los estándares de comunicación subyacentes, como
SOAP, WSDL y XML. El uso de esas clases le permite centrarse en la lógica del
servicio, sin preocuparse de la infraestructura de comunicaciones que se requiere en el
desarrollo de software distribuido.
Por último, al igual que los formularios Web en un entorno administrado, el servicio Web
XML se ejecutará con la velocidad del lenguaje máquina nativo mediante la
comunicación escalable de IIS.
16
Textos Universitarios / Serie Docencia
________________________________________________________________________
Capítulo 12
GDI+: La nueva Generación en Interfases gráficas
Comenzaremos diciendo que el GDI+ de Microsoft es la parte del los sistemas operativos
Windows XP o Windows Server 2003 que provee gráficos vectoriales en dos
dimensiones, compatibilidad de imágenes y tipografía. Es también una mejora del GDI
incluida en los sistemas operativos de Windows anteriores a XP. GDI+ reside en un
conjunto de clases que presentan compatibilidad con la versión anterior de GDI y
mediante esta biblioteca de clases se pueden escribir aplicaciones independientes de
dispositivos, lo que permite al programador hacer llamadas a los métodos proporcionados
por las clases de GDI+ y estos métodos a su vez se encargan de llamar a los controladores
de dispositivos necesarios para que la aplicación se ejecute sin problema. GDI+ está
disponible como un redistribuible para Windows NT 4.0 SP6, Windows 2000, Windows
98 y Windows Me. Para descargar el último redistribuible, entre al sitio:
http://www.microsoft.com/downloads
Y haga la búsqueda de Platform SDK Redistributable: GDI+, luego baje el archivo
gdiplus_dnld.exe, el cual al momento de ejecutar le permitirá escoger el árbol de
directorios a usar. Tenga en cuenta que este redistribuible únicamente será necesario
cuando se vaya a instalar en la misma computadora un programa ejecutable que fue
elaborado haciendo uso de esta nueva tecnología.
Además, GDI+ es una componente del CLR (Common Language Runtime) del
Framework .NET de Microsoft. Este ultimo que es descargable gratuitamente desde:
http://msdn.microsoft.com/netframework/
Es el modelo de programación de la plataforma .NET. Los componentes clave del
Framework.NET como se indicó en la introducción son:
•
•
•
Common Language Runtime (motor de ejecución del código administrado
generado por compiladores de Visual Basic .NET, C#, J# y JScript .NET)
Bibliotecas de clases unificadas (la biblioteca de clases del Framework .NET es
una biblioteca de clases, interfases y tipos de valor que se incluye en el SDK del
Framework .NET de Microsoft. Esta biblioteca brinda acceso a la funcionalidad
del sistema y es la base sobre la que se crean las aplicaciones, los componentes y
los controles del Framework .NET)
Componentes ASP.NET (ASP.NET es más que una nueva versión de las páginas
Active Server, es una plataforma de programación Web unificada que
proporciona los servicios necesarios para que los programadores creen
2
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/AboutGDIPlus/IntroductiontoGDIPlus junio 3 de
2006.
17
Jenaro C. Paz
________________________________________________________________________
aplicaciones Web para la empresa. que proporciona un modelo de programación y
una estructura nuevos para crear aplicaciones más seguras, escalables y estables.
A la hora de crear una aplicación ASP.NET, se pueden utilizar formularios Web
Forms o servicios Web XML o combinarlas de la manera que más les convenga.
Las dos características son compatibles con la misma infraestructura, que permite
utilizar esquemas de autenticación, almacenar en caché datos que se utilizan con
frecuencia y personalizar la configuración de la aplicación, entre otras muchas
cosas.).
Es conveniente aclarar que hay dos versiones del Framework .Net
• El Redistribuible, si desea ejecutar aplicaciones Windows en su computadora
que fueron elaboradas con esta nueva tecnología y
• La versión de Programador que incluye todo lo que los desarrolladores de
software necesitan para escribir, probar y poner en producción aplicaciones
Framework.NET, además incluye documentación, ejemplos, herramientas de
línea de comando y compiladores. Debe de instalarse primeramente el
redistribuible.
Dentro de las características para gráficos de 2D, GDI+ soporta:
•
•
•
•
•
•
•
•
•
•
•
Compatibilidad de mezcla alfa para todos los gráficos antiguos
Anti-alias
Rellenos de textura y degradado
Líneas gruesas
Curvas spline cardinales
Regiones dimensionables
Coordenadas de punto flotante
Líneas compuestas
Lápiz insertado
Dimensionalidad y filtrado de alta calidad
Varios estilos de línea y opciones para extremos
La compatibilidad de imágenes incluye lo siguiente:
•
•
•
•
18
Compatibilidad original para formatos de archivos de imagen como .jpeg, .png,
.gif, .bmp, .tiff, .exif e .icon
Interfases comunes para la codificación y decodificación de formatos de imágenes
de trama con carácter arbitrario
Arquitectura extensible para agregar de forma dinámica nuevos formatos de
archivos de imagen
Compatibilidad de procesamiento de imágenes originales para operaciones
comunes relacionadas con puntos como brillo, contraste, color, equilibrio,
difuminación y disolución. Compatibilidad de transformaciones comunes como
rotación o cortes, entre otras.
Textos Universitarios / Serie Docencia
________________________________________________________________________
Administración de color
•
Compatibilidad con sRGB, ICM2 y sRGB64
La compatibilidad tipográfica incluye lo siguiente:
•
•
•
•
•
•
Compatibilidad original ClearType
Texto rellenado con textura y degradado
Compatibilidad total con Unicode en todas las plataformas
Compatibilidad con todas las secuencias de comandos de Windows 2000
Actualización con los estándares de Unicode 3.0
Compatibilidad con servicios de línea de texto para una mejor lectura textual
Las clases de GDI+ residen en los siguientes seis espacios de nombres System.Drawing,
System.Drawing.Design, System.Drawing.Drawing2D, System.Drawing.Imaging,
System.Drawing.Printing y System.Drawing.Text. Todos estos espacios de nombres
se encuentran en el ensamblado System.Drawing.DLL.
Figura 1.1. Espacio de nombres System.Drawing
Para usar cualquier clase definida en estos espacios de nombres, hay que incluirlos en su
aplicación.
19
Jenaro C. Paz
________________________________________________________________________
1.1 Superficies de dibujo y sistemas de Coordenadas en
GDI+3
Es esencial entender lo que es una superficie de dibujo y conocer los sistemas de
coordenadas de GDI+ para poder escribir aplicaciones que tengan que ver con la
generación de gráficos en línea.
1.1.1 Superficies de dibujo
Cualquier aplicación para dibujo consiste de los siguientes componentes:
•
El lienzo (canvas), que viene siendo el espacio donde los diferentes objetos se
dibujarán, en una aplicación Web, la forma Web es el lienzo.
•
Un pincel (brush) o una pluma (pen) es el color, la textura y la dimensión de los
objetos que se van a dibujar en el lienzo.
•
El procedimiento indica como los objetos se dibujan en el lienzo.
Cada superficie de dibujo cuenta con cuatro propiedades: ancho, alto, resolución y
profundidad de color.
• El ancho y alto de una superficie determinan su tamaño y estos están
especificados por el número de pixeles tanto horizontal como verticalmente.
Entendemos un píxel como el elemento más pequeño que participa en un proceso
de dibujo para desplegar objetos gráficos o imágenes en la pantalla. La densidad
de pixeles se representa por el valor de puntos por pulgada (dpi).
•
La resolución de una superficie es una medida de la calidad de la imagen en
puntos por pulgada (dpi).
•
La profundidad de color de una superficie es el número de colores que puede
tener un píxel.
La calidad de un píxel es directamente proporcional a la profundidad de color. La
estructura Color representa un color en GDI+. Mas adelante en este capitulo
ahondaremos sobre este tópico.
1.1.2 Sistemas de Coordenadas
El Sistema de coordenadas representa las posiciones de los objetos gráficos en un
dispositivo de despliegue como monitores o impresoras. El sistema de coordenadas de
GDI+ tiene como origen la esquina superior izquierda. El eje x apunta hacia la derecha y
el eje y apunta hacia abajo
3
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/aboutGDIPlus/
coordinatesystemsandtransformations/ typesofcoordinatesystems.asp junio 3 de 2006
20
Textos Universitarios / Serie Docencia
________________________________________________________________________
Figura 1.2. Sistema de Coordenadas de GDI+
Puntos con valores negativos de x ó y no son visibles en este sistema de coordenadas, sin
embargo mediante transformaciones puede trasladarse el origen para que objetos con
valores negativos puedan mostrarse.
GDI+ usa tres espacios de coordenadas: mundiales, de página y de dispositivo. Cuando se
hace la llamada g.DrawLine(myPen,0,0,100,150), los puntos que se le pasan al
método DrawLine [ (0,0) y (100,150)] están dados en el espacio de coordenadas
mundiales. Antes que GDI+ pueda dibujar la línea en la pantalla, las coordenadas pasan
por una serie de transformaciones. Una transformación convierte las coordenadas
mundiales a coordenadas de página y otra transformación convierte estas últimas a
coordenadas de dispositivo.
Suponga que se va a trabajar con un sistema de coordenadas que tiene su origen en el
cuerpo del área del cliente a 50 pixeles de la orilla izquierda y a 50 pixeles de la orilla
superior como se muestra a continuación.
Figura 1.3. Sistema de Coordenadas trasladado con respecto al origen
Cuando se llama el método g.DrawLine(myPen,0,0,100,150) se obtiene una línea
como la mostrada a continuación
21
Jenaro C. Paz
________________________________________________________________________
Figura 1.4. Línea en el Sistema de Coordenadas trasladado
Las coordenadas de los puntos extremos en los tres sistemas de coordenadas son:
Mundiales (0,0)
(100,150)
Página
(50,50) (150,200)
Dispositivo (50,50) (150,200)
Note que el sistema de coordenadas de página tiene su origen en la esquina superior
izquierda del área del cliente y que debido a que la unidad de medida es el píxel, el
espacio de coordenadas de dispositivo es el mismo, pero que si la unidad de medida fuera
por ejemplo el centímetro entonces habría una diferencia entre los tres sistemas de
coordenadas.
La transformación que convierte al sistema de coordenadas mundial al sistema de
coordenadas de página se llama transformación mundial y esta sustentada por el objeto
Graphics. En el ejemplo anterior la Transformación consiste en una translación de 50
unidades en el eje x así como también en el eje de las y. En el siguiente ejemplo se
establece una transformación mundial para un objeto Graphics y luego se utiliza este para
dibujar la línea del ejemplo anterior.
g.TranslateTransform(50.0F,50.0F);
g.DrawLine(myPen,0,0,100,150);
Figura 1.5. Línea dibujada por GDI+
22
Textos Universitarios / Serie Docencia
________________________________________________________________________
La transformación que convierte al sistema de coordenadas de página al sistema de
dispositivo se llama transformación de página, también está sustentada por el objeto
Graphics mediante las propiedades PageUnit y PageScale conteniendo también las
propiedades DpiX y DpiY, que sirven para investigar el número de pixeles por pulgada
tanto en el eje x como en el y.
Se puede usar la propiedad PageUnit de la clase Graphics para especificar la unidad de
medida a usar. El siguiente ejemplo dibuja una línea de (0,0) a (1,2) donde el punto (1,2)
se encuentra a 1 pulgada a la derecha y 2 pulgadas hacia abajo de (0,0).
g.PageUnit=GraphicsUnit.Inch;
g.TranslateTransform(0.5F,0.5F);
Pen myPen= new Pen(Color.Red, 2/g.DpiX);
Pen myPen2= new Pen(Color.Blue,1/g.DpiX);
g.DrawLine(myPen2,0,0,2,0);
g.DrawLine(myPen2,0,0,0,2);
g.DrawLine(myPen, 0, 0, 1, 2);
donde myPen y myPen2 deben estar definidas de la manera anterior para que tenga un
grosor de 2 pixeles y 1 pixel y no de 2 y 1 pulgadas
GraphicsUnit4 es una enumeración que contiene los elementos:
Nombre de miembro
Display
Document
Inch
Millimeter
Pixel
Point
World
Descripción
Especifica 1/75 de pulgada como unidad de
medida.
Especifica la unidad del documento (1/300
de pulgada) como unidad de medida.
Especifica que la pulgada es la unidad de
medida.
Especifica que el milímetro es la unidad de
medida.
Especifica que un píxel de dispositivo es la
unidad de medida.
Especifica que un punto de la impresora
(1/72 de pulgada) es la unidad de medida.
Especifica que la unidad universal es la
unidad de medida.
Tabla 1.1. Enumeración GraphicsUnit
4
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDrawingGraphicsUnitClassTopic.asp
junio 3 2006
23
Jenaro C. Paz
________________________________________________________________________
Si suponemos que el dispositivo de despliegue (pantalla) tiene 72 puntos por pulgada en
ambas direcciones, los puntos extremos de la línea en el ejemplo anterior tienen los
siguientes valores en los tres espacios de coordenadas:
Mundiales (0,0)
(1,2)
Página
(0.5,0.5) (1.5,2.5)
Dispositivo (36,36) (108,180)
La Figura 1.6 muestra este ejemplo y lo dicho anteriormente:
Figura 1.6. Llínea dibujada por GDI+ donde se ha trasladado el origen
y cambiado la especificación de unidades
En el Capítulo 10 trataremos con las Matrices que representan a las Transformaciones.
1.2
Estructuras Esenciales
Estructuras frente a clases
Las estructuras pueden parecer muy similares a las clases, pero existen diferencias
importantes que se deben tener en cuenta. En primer lugar, las clases son tipos de
referencia mientras que las estructuras son tipos de valor. Mediante las estructuras, se
pueden crear objetos que se comportan como los tipos basicos - Boolean, Byte, Char,
Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32, UInt64 - y
aprovechar sus beneficios.
¿Montón o pila?
Cuando se realiza una llamada con el operador New sobre una clase, se asigna espacio en
el montón (heap). Sin embargo, cuando se crea una instancia de una estructura, el espacio
se asigna en la pila (stack). De esta forma, se consigue mejorar el rendimiento. Además, a
24
Textos Universitarios / Serie Docencia
________________________________________________________________________
diferencia de las clases, no tendrá que tratar con referencias a instancias de estructuras. Se
trabaja directamente con la instancia de la estructura. Debido a esto, cuando se pasa una
estructura a un método, se pasa por valor en vez de como una referencia.
Constructores y herencia
Las estructuras pueden declarar constructores, pero deben utilizar parámetros. Es un error
declarar un constructor predeterminado (sin parámetros) para una estructura. Los
miembros de una estructura no pueden tener inicializadores. Siempre existe un
constructor predeterminado que inicializa los miembros de la estructura con sus valores
predeterminados.
Cuando se crea un objeto struct mediante el operador new, se crea y se llama al
constructor apropiado. A diferencia de las clases, se pueden crear instancias de las
estructuras sin utilizar el operador New. Si no se utiliza New, los campos permanecerán
sin asignar y el objeto no se podrá utilizar hasta haber inicializado todos los campos.
A diferencia de las clases, para las estructuras no existe herencia. Una estructura no
puede heredar de otra estructura o clase, ni puede ser la base de una clase. Sin embargo,
las estructuras heredan de la clase base object. Una estructura puede implementar
interfases del mismo modo que las clases.
Conclusión
Las estructuras son sencillas de utilizar y pueden resultar muy útiles en ocasiones.
Simplemente, tenga en cuenta que se crean en la pila y que no se utilizan referencias a
ellas, sino que se trata directamente con ellas. Siempre que necesite un tipo que se utilice
a menudo y que trate con valores de datos, las estructuras constituyen una excelente
opción.
Cuando se programa para ambientes gráficos es muy común y casi necesario trabajar con
los siguientes cuatro tipos de datos (definidos por estructuras):
•
•
•
•
Puntos de coordenadas bidimensionales (forma entera y de punto flotante)
Tamaños en términos de ancho y alto (forma entera y de punto flotante)
Rectángulos (forma entera y de punto flotante)
Colores
Estas siete estructuras junto con CharacterRange son las ocho únicas estructuras
definidas en el espacio de nombres System.Drawing5. Aunque en C# las clases y las
estructuras son muy parecidas ya que sus métodos y campos (al igual que propiedades y
eventos) son privados en ambas, difieren en que las clases son tipos referencia (o
apuntadores a bloques de memoria) y las estructuras son tipos valor así como los tipos
básicos
-Boolean, Byte, Char, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16,
UInt32, UInt64-. Todas estas estructuras (véase Figura 1.2)
descienden de
5
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemDrawing.asp junio 3 2006
25
Jenaro C. Paz
________________________________________________________________________
System.ValueType y debe pensarse en este tipo de datos como objetos livianos o
pequeños que se crean y destruyen con frecuencia.
Figura 1.7. Herencia para las estructuras
1.2.1 Estructura Point (puntos bidimensionales)
Point representa un par ordenado de coordenadas x (horizontal) e y (vertical) de enteros
que define un punto en un plano bidimensional que puede ser la pantalla de una
computadora o una hoja de papel en la impresora.
1.2.1.1 Constructores públicos
Sobrecargado. Inicializa una nueva instancia
de la clase Point con las coordenadas
especificadas.
Point (Constructor)
Tabla 1.2. Miembros de la estructura Point
Para crear un punto hay que utilizar el constructor de la siguiente manera:
Point myPoint = new Point(5,12);
int a=134;
int b=65;
Point zPoint = new Point(a,b);
1.2.1.2 Campos públicos
Empty
Representa un Point nulo.
Ejemplos:
Point aPoint = Point.Empty;
1.2.1.3 Propiedades públicas
IsEmpty
X
Y
26
Obtiene un valor que indica si el objeto
Point está vacío.
Obtiene o establece la coordenada x de este
objeto Point.
Obtiene o establece la coordenada y de este
Textos Universitarios / Serie Docencia
________________________________________________________________________
objeto Point.
Ejemplos:
Point aPoint = Point.Empty;
aPoint.X = 20;
aPoint.Y = 40;
1.2.1.4 Métodos públicos
Ceiling
Equals
GetHashCode
GetType (se hereda de Object)
Offset
Round
ToString
Truncate
Convierte el objeto PointF especificado en
un objeto Point redondeando los valores del
objeto PointF a los valores enteros
superiores siguientes.
Reemplazado. Especifica si este objeto
Point tiene las mismas coordenadas que el
Object especificado.
Reemplazado. Devuelve un código hash
para este objeto Point.
Obtiene el objeto Type de la instancia
actual.
Convierte este objeto Point en la cantidad
especificada.
Convierte el objeto PointF especificado en
Point redondeando los valores del objeto
Point a los valores enteros más cercanos.
Reemplazado. Convierte esta estructura
Point en una cadena legible para el usuario.
Convierte el objeto PointF especificado al
objeto Point mediante el truncamiento de
los valores del objeto Point.
Ejemplos:
PointF bPoint=new PointF(20.5F,13.2F);
Point cPoint=Point.Ceiling(bPoint);
Point dPoint= new Point(20,13);
Boolean bvar=bPoint.Equals(dPoint);
int hCode=dPoint.GetHashCode();
Type oneType = dPoint.GetType();
dPoint.Offset(1,2); // p(21,15)
Point ePoint=Point.Round(bPoint);
String sPoint = ePoint.ToString();
Point hPoint = Point.Truncate(bPoint);
1.2.1.5 Operadores públicos y conversiones de tipos
Operador de suma
Convierte Point en Size especificado.
27
Jenaro C. Paz
________________________________________________________________________
Operador de igualdad
Operador de desigualdad
Operador de resta
Conversión de Point a Size
Conversión de Point a PointF
Compara dos objetos Point. El resultado
especifica si los valores de las propiedades
X y Y de los dos objetos Point son iguales.
Compara dos objetos Point. El resultado
especifica si los valores de las propiedades
X y Y de los dos objetos Point no son
iguales.
Convierte un objeto Point en la cantidad
negativa del objeto Size especificado.
Crea un nuevo objeto Size con las
coordenadas del objeto Point especificado.
Crea un nuevo objeto PointF con las
coordenadas del objeto Point especificado.
Ejemplos:
Point hPoint
Size tSize
Point iPoint
Point jPoint
bool areEqual
bool unEqual
Point mPoint
Size nSize
PointF fPoint
=
=
=
=
=
=
=
=
=
new Point(5,4);
new Size(10,10);
hPoint + tSize;
new Point(30,23);
iPoint == jPoint;
iPoint != mPoint;
iPoint-tSize;
new Size(iPoint);
(PointF)jPoint;
1.2.1.6 Métodos protegidos
Reemplazado. Permite que un objeto Object
intente liberar recursos y realizar otras
operaciones de limpieza antes de que el
objeto Object sea reclamado por el
recolector de elementos no utilizados.
MemberwiseClone (se hereda de Object) Crea una copia superficial del objeto Object
actual.
Finalize (se hereda de Object)
1.2.2 Estructura Size (tamaños)
Size almacena un par de enteros ordenados, normalmente el ancho y el alto de un
rectángulo.
1.2.2.1 Constructores públicos
Size (Constructor)
Sobrecargado. Inicializa una nueva instancia
de la clase Size a partir del objeto Point
especificado.
Tabla 1.3. Miembros de la estructura Size
28
Textos Universitarios / Serie Docencia
________________________________________________________________________
Ejemplos:
Point hPoint
Size zSize
Size tSize
Size mSize
=
=
=
=
new
new
new
new
Point(5,4);
Size();
Size(10,10);
Size(hPoint);
1.2.2.2 Campos públicos
Empty
Inicializa una nueva instancia de la clase
Size.
Ejemplos:
Size aSize = Size.Empty;
1.2.2.3 Propiedades públicas
Height
IsEmpty
Width
Obtiene o establece el componente vertical
de este Size.
Prueba si este objeto Size tiene un ancho y
un alto de cero.
Obtiene o establece el componente
horizontal de este Size.
Ejemplos:
Size aSize
= Size.Empty;
aSize.Height = 20;
aSize.Width = 4*aSize.Height;
if(!aSize.IsEmpty) {aSize.Height=0; aSize.Width=0;}
1.2.2.4 Métodos públicos
Ceiling
Equals
GetHashCode
GetType (se hereda de Object)
Round
Convierte la estructura SizeF especificada
en una estructura Size redondeando los
valores de SizeF a los valores enteros
superiores siguientes.
Reemplazado. Comprueba si el objeto
especificado es Size con las mismas
dimensiones que este Size.
Reemplazado. Devuelve un código hash
para esta estructura Size.
Obtiene el objeto Type de la instancia
actual.
Convierte la estructura SizeF especificada
en una estructura Size redondeando los
valores de Size a los valores enteros más
29
Jenaro C. Paz
________________________________________________________________________
cercanos.
Reemplazado. Crea una cadena legible para
el usuario que representa este Size.
Convierte la estructura SizeF especificada
en una estructura Size mediante el
truncamiento de los valores de la estructura
Size a los valores enteros inferiores
siguientes.
ToString
Truncate
Ejemplos:
SizeF bSize=new SizeF(23.5F,23.2F);
Size cSize=Size.Ceiling(bSize);
Size dSize= new Size(29,33);
Boolean b_var=bSize.Equals(dSize);
int h_Code=dSize.GetHashCode();
Type theType = dSize.GetType();
Size eSize=Size.Round(bSize);
String sSize = eSize.ToString();
Size hSize = Size.Truncate(bSize);
1.2.2.5 Operadores públicos y conversiones de tipos
Operador de suma
Operador de igualdad
Operador de desigualdad .
Operador de resta
Conversión de Size a Point
Conversión de Size a SizeF
Ejemplos:
Size oSize
Size pSize
Size iSize
Size jSize
bool bEqual
bool bunEqual
Size mSize
Point nPoint
SizeF fSize
30
=
=
=
=
=
=
=
=
=
new Size(15,24);
new Size(10,10);
oSize + pSize;
new Size(34,122);
iSize == jSize;
iSize != oSize;
iSize-tSize;
new Point(iSize);
(SizeF)jSize;
Agrega el ancho y el alto de una estructura
Size al ancho y alto de otra estructura Size.
Determina si dos estructuras Size son
iguales.
Determina si dos estructuras Size son
distintas.
Resta el ancho y el alto de una estructura
Size del ancho y alto de otra Size.
Convierte el objeto Size especificado en
Point.
Convierte el objeto Size especificado en
SizeF.
Textos Universitarios / Serie Docencia
________________________________________________________________________
1.2.2.6 Métodos protegidos
Finalize (se hereda de Object)
Reemplazado. Permite que un objeto Object
intente liberar recursos y realizar otras
operaciones de limpieza antes de que el
objeto Object sea reclamado por el
recolector de elementos no utilizados.
En C# y C++, los finalizadores se expresan
mediante la sintaxis del destructor.
MemberwiseClone (se hereda de Object) Crea una copia superficial del objeto Object
actual.
1.2.3 Estructura Rectangle (rectángulos)
Rectangle almacena un conjunto de cuatro enteros que representan la posición y tamaño
de un rectángulo.
1.2.3.1 Constructores públicos
Sobrecargado. Inicializa una nueva instancia
de la clase Rectangle con la ubicación y el
tamaño y especificados.
Rectangle (Constructor)
Tabla 1.4. Miembros de la estructura Rectangle
Ejemplos:
Rectangle aRect
Point onePoint
Size theSize
Rectangle bRect
RectangleF gRect
=
=
=
=
=
new
new
new
new
new
Rectangle(15,24,80,60);
Point(20,20);
Size(73,127);
Rectangle(onePoint, theSize);
RectangleF(10.3F,24.7F,86.4F,45.3F);
1.2.3.2 Campos públicos
Empty
Representa una estructura Rectangle con las
propiedades sin inicializar.
Ejemplos:
Rectangle hRect = Rectangle.Empty;
1.2.3.3 Propiedades públicas
Bottom
Obtiene la coordenada y del borde inferior
de esta estructura Rectangle.
31
Jenaro C. Paz
________________________________________________________________________
Height
Obtiene o establece el alto de esta estructura
Rectangle.
IsEmpty
Comprueba si todas las propiedades
numéricas de este objeto Rectangle tienen
valores de cero.
Obtiene la coordenada x del borde izquierdo
de esta estructura Rectangle.
Obtiene o establece las coordenadas de la
esquina superior izquierda de esta estructura
Rectangle.
Obtiene la coordenada x del borde derecho
de esta estructura Rectangle.
Left
Location
Right
Size
Obtiene o establece el tamaño de este
Rectangle.
Top
Obtiene la coordenada y del borde superior
de esta estructura Rectangle.
Width
Obtiene o establece el ancho de esta
estructura Rectangle.
X
Obtiene o establece la coordenada x de la
esquina superior izquierda de esta estructura
Rectangle.
Obtiene o establece la coordenada y de la
esquina superior izquierda de esta estructura
Rectangle.
Y
Ejemplos:
int Y1 = aRect.Top;
int Y2 = aRect.Bottom;
int X1 = aRect.Left;
int X2 = aRect.Right;
int aWidth = aRect.Width;
int aHeight = aRect.Height;
Point onePoint
= new Point(20,20);
Size theSize
= new Size(73,127);
Rectangle cRect = Rectangle.Empty;
If(cRect.IsEmpty)
{
cRect.X = X1;
cRect.Y = Y1;
cRect.Size=theSize;
32
Textos Universitarios / Serie Docencia
________________________________________________________________________
}
Rectangle dRect = Rectangle.Empty;
dRect.Location= onePoint;
dRect.Width = 100;
dRect.Height = 200;
1.2.3.4 Métodos públicos
Ceiling
Contains
Equals
FromLTRB
GetHashCode
GetType (se hereda de Object)
Inflate
Intersect
IntersectsWith
Offset
Round
ToString
Convierte la estructura RectangleF
especificada en una estructura Rectangle
redondeando los valores de RectangleF a
los valores enteros superiores siguientes.
Sobrecargado. Determina si el punto
especificado está dentro de la región
rectangular que define Rectangle.
Reemplazado. Comprueba si obj es una
estructura Rectangle con la misma
ubicación y el mismo tamaño que esta
estructura Rectangle.
Crea una estructura Rectangle con las
ubicaciones de los bordes especificadas.
Reemplazado. Devuelve el código hash para
esta estructura Rectangle. Para obtener
información acerca del uso de códigos hash,
vea Object.GetHashCode.
Obtiene el objeto Type de la instancia
actual.
Sobrecargado. Crea y devuelve una copia
aumentada de la estructura Rectangle
especificada. La copia se aumenta en la
cantidad especificada.
Sobrecargado. Reemplaza esta estructura
Rectangle con la intersección de ella misma
y la estructura Rectangle especificada.
Determina si este rectángulo tiene una
intersección con rect.
Sobrecargado. Ajusta la ubicación de este
rectángulo en la cantidad especificada.
Convierte la estructura RectangleF en
Rectangle redondeando los valores de
RectangleF a los valores enteros más
cercanos.
Reemplazado. Convierte los atributos de
este Rectangle en una cadena inteligible
para el usuario.
33
Jenaro C. Paz
________________________________________________________________________
Convierte el objeto RectangleF especificado
en Rectangle mediante el truncamiento de
los valores RectangleF.
Obtiene una estructura Rectangle que
contiene la intersección de dos estructuras
Rectangle.
Truncate
Union
Ejemplos:
RectangleF aR = new RectangleF(5.3F, 2.1F, 23.9F,45.6F);
Rectangle bR
= Rectangle.Ceiling(aR);
bool bInside
= aR.Contains(6.7F,4.5F);
bool bInside2 = aR.Contains(bR);
bool bEQ
= aR.Equals(bR);
Rectangle myR = Rectangle.FromLTRB(X1,Y1,X2,Y2);
Type rType
= myR.GetType();
aR.Inflate(23.5F,12.9F);
bR.Intersect(dRect);
bool bIntersect = aR.IntersectsWith(bR);
aR.Offset(10.0F,10.0F);
Rectangle cR = Rectangle.Round(aR);
string sRect = cR.ToString();
Rectangle dR = Rectangle.Truncate(aR);
Rectangle Ra = new Rectangle(5,5,20,20);
Rectangle Rb = new Rectangle(10,10,30,30);
Rectangle rectan = Rectangle.Union(Ra,Rb);
1.2.3.5 Operadores públicos
Operador de igualdad
Operador de desigualdad
Comprueba si dos estructuras Rectangle
tiene la misma ubicación y el mismo
tamaño.
Comprueba si dos estructuras Rectangle
tiene una ubicación o un tamaño diferentes.
Ejemplos:
RectangleF aR =
Rectangle bR =
bool bEqualRect
bool bSameRect
new RectangleF(5.3F, 2.1F, 23.9F,45.6F);
Rectangle.Ceiling(aR);
= Ra == Rb;
= Ra != Rb;
1.2.3.6 Métodos protegidos
Finalize (se hereda de Object)
34
Reemplazado. Permite que un objeto Object
intente liberar recursos y realizar otras
operaciones de limpieza antes de que el
objeto Object sea reclamado por el
Textos Universitarios / Serie Docencia
________________________________________________________________________
recolector de elementos no utilizados.
En C# y C++, los finalizadores se expresan
mediante la sintaxis del destructor.
MemberwiseClone (se hereda de Object) Crea una copia superficial del objeto Object
actual.
1.2.4 Estructura Color (colores)
Color representa un color ARGB. (Alfa, Red, Green, Blue). En GDI+ un color está
representado por una estructura de 32 bits construido de cuatro componentes cuyo rango
de valores varia de 0 a 255. La componente alfa (los primeros 8 bits) del color representa
la transparencia, que determina de que manera un color se mezcla con el fondo. Un valor
alfa de 0 representa un color completamente transparente y un valor de 255 representa un
color opaco; valores intermedios producen resultados entre estos extremos. El espacio de
colores RGB puede pensarse como un cubo en donde la longitud indica la intensidad de
rojo, el ancho indica la intensidad de verde y la altura indica la intensidad en azul. El
punto (0,0,0) es negro y el (255,255,255) es blanco. Cualquier otro color disponible se
encuentra dentro del cubo.
1.2.4.1 Campos públicos
Representa un color nulo.
Empty
Tabla 1.5. Miembros de la estructura Color
1.2.4.2 Propiedades públicas
A
B
G
IsEmpty
IsKnownColor
IsNamedColor
Obtiene el valor del componente alfa de esta
estructura Color.
Obtiene el valor del componente azul de
esta estructura Color.
Obtiene el valor del componente verde de
esta estructura Color.
Especifica si esta estructura Color está sin
inicializar.
Especifica si esta estructura Color es un
color predefinido. Los elementos de la
enumeración KnownColor representan los
colores predefinidos.
Especifica si esta estructura Color es un
color predefinido. Los elementos de la
enumeración KnownColor representan los
35
Jenaro C. Paz
________________________________________________________________________
colores predefinidos.
Especifica si esta estructura Color es un
color del sistema. Un color del sistema es un
color utilizado en un elemento que se
muestra en Windows. Los elementos de la
enumeración KnownColor representan los
colores del sistema.
Obtiene el nombre de este nombre de
Color. Devolverá el nombre del color
definido por el usuario, si el color se creó a
partir de un nombre, o el nombre de un
color conocido. Para los colores
personalizados, se devuelve el valor RGB.
Obtiene el valor del componente rojo de
esta estructura Color.
IsSystemColor
Name
R
Propiedades públicas (
AliceBlue
AntiqueWhite
Aqua
Aquamarine
Azure
Beige
Bisque
Black
BlanchedAlmond
Blue
BlueViolet
Brown
BurlyWood
CadetBlue
Chartreuse
Chocolate
Coral
CornflowerBlue
Cornsilk
Crimson
Cyan
DarkBlue
DarkCyan
DarkGoldenrod
DarkGray
DarkGreen
DarkKhaki
DarkMagenta
36
Obtiene un color definido por el sistema.)
DarkTurquoise
DarkViolet
DeepPink
DeepSkyBlue
DimGray
DodgerBlue
Firebrick
FloralWhite
ForestGreen
Fuchsia
Gainsboro
GhostWhite
Gold
Goldenrod
Gray
Green
GreenYellow
Honeydew
HotPink
IndianRed
Indigo
Ivory
Khaki
Lavender
LavenderBlush
LawnGreen
LemonChiffon
LightBlue
LightSkyBlue
LightSlateGray
LightSteelBlue
LightYellow
Lime
LimeGreen
Linen
Magenta
Maroon
MediumAquamarine
MediumBlue
MediumOrchid
MediumPurple
MediumSeaGreen
MediumSlateBlue
MediumSpringGreen
MediumTurquoise
MediumVioletRed
MidnightBlue
MintCream
MistyRose
Moccasin
NavajoWhite
Navy
OldLace
Olive
OliveDrab
Orange
Peru
Pink
Plum
PowderBlue
Purple
Red
RosyBrown
RoyalBlue
SaddleBrown
Salmon
SandyBrown
SeaGreen
SeaShell
Sienna
Silver
SkyBlue
SlateBlue
SlateGray
Snow
SpringGreen
SteelBlue
Tan
Teal
Thistle
Tomato
Transparent
Turquoise
Violet
Textos Universitarios / Serie Docencia
________________________________________________________________________
DarkOliveGreen
DarkOrange
DarkOrchid
DarkRed
DarkSalmon
DarkSeaGreen
DarkSlateBlue
DarkSlateGray
LightCoral
LightCyan
LightGoldenrodYellow
LightGray
LightGreen
LightPink
LightSalmon
LightSeaGreen
OrangeRed
Orchid
PaleGoldenrod
PaleGreen
PaleTurquoise
PaleVioletRed
PapayaWhip
PeachPuff
Wheat
White
WhiteSmoke
Yellow
YellowGreen
1.2.4.3 Métodos públicos
Equals
FromArgb
FromKnownColor
FromName
GetBrightness
GetHashCode
GetHue
GetSaturation
GetType (se hereda de Object)
Reemplazado. Comprueba si el objeto
especificado es una estructura Color y si
equivale a esta estructura Color.
Sobrecargado. Crea una estructura Color a
partir de los cuatro valores de los
componentes ARGB de 8 bits (alfa, rojo,
verde y azul).
Crea una estructura Color a partir del color
predefinido especificado.
Crea una estructura Color a partir del
nombre especificado de un color
predefinido.
Obtiene el valor de brillo HSB (brillo de
saturación de matiz) de esta estructura
Color.
Reemplazado. Devuelve un código hash
para esta estructura Color.
Obtiene el valor de matiz HSB (brillo de
saturación de matiz), en grados, de esta
estructura Color.
Obtiene el valor de saturación HSB (brillo
de saturación de matiz) de esta estructura
Color.
Obtiene el objeto Type de la instancia
actual.
ToArgb
Obtiene el valor ARGB de 32 bits de esta
estructura Color.
ToKnownColor
Obtiene el valor KnownColor de esta
estructura Color.
37
Jenaro C. Paz
________________________________________________________________________
ToString
Reemplazado. Convierte esta estructura
Color en una cadena inteligible para el
usuario.
1.2.4.4 Operadores públicos
Operador de igualdad
Comprueba si dos estructuras Color
especificadas son equivalentes.
Operador de desigualdad
Comprueba si dos estructuras Color
especificadas son distintas.
1.2.4.5 Métodos protegidos
Finalize (se hereda de Object)
Reemplazado. Permite que un objeto Object
intente liberar recursos y realizar otras
operaciones de limpieza antes de que el
objeto Object sea reclamado por el
recolector de elementos no utilizados.
En C# y C++, los finalizadores se expresan
mediante la sintaxis del destructor.
MemberwiseClone (se hereda de Object) Crea una copia superficial del objeto Object
actual.
Ejemplos:
RectangleF aR = new RectangleF(5.3F, 2.1F, 23.9F,45.6F);
//Crear un color usando ARGB
Color redColor = Color.FromArgb(120,255,0,0);
//Crear un color usando su nombre
Color orchidColor = Color.FromName(“Orchid”);
//Crear un color a partir de un color conocido
Color blueColor = Color.FromKnowColor(KnownColor.Blue);
//Crear un color vacio
Color unColor = Color.Empty;
//Verifica si un color es vacio
if(unColor.IsEmpty)
{
unColor = Color.LightGoldenrodYellow;
}
//Valor de propiedades
string str = “Color : “+ greenColor.Name +
“, A:” + greenColor.A.ToString() +
“, R:” + greenColor.R.ToString() +
“, G:” + greenColor.G.ToString() +
“, B:” + greenColor.B.ToString();
//Creacion de Color
38
Textos Universitarios / Serie Docencia
________________________________________________________________________
Color myColor = Color.FromArgb(255,200,0,120);
//Obtener matiz, saturación y brillo
float matiz = myColor.GetHue();
float saturacion = myColor.GetSaturation();
float brillo = myColor.GetBrightness();
string str2 = “Matiz: “+ matiz.ToString() + “\n” +
“Saturacion: “+saturacion.ToString() + “\n” +
“Brillo: “+brillo.ToString();
En el ejemplo anterior hemos utilizado las propiedades públicas A, R, G, B para obtener
las componentes del color en el sistema ARGB y los métodos públicos GetHue,
GetSaturation y GetBrightness para obtenerlos en el sistema HSB.
El Framework.NET de Microsoft cuenta con las clases TypeConverter y ColorConverter
para llevar a cabo conversiones cuando el usuario cuenta con la información de Color en
un formato especificado bajo algún estándar y desea procesarlo bajo aplicaciones Web
haciendo uso de GDI+, veamos como son estas dos clases:
1.2.5 Clase TypeConverter6
Requisitos
Espacio de nombres: System.ComponentModel
Proporciona un modo unificado para convertir los tipos de valores en otros tipos, así
como para obtener acceso a valores estándar y a subpropiedades.
1.2.5.1 Constructores públicos
TypeConverter (Constructor)
Inicializa una nueva instancia de la clase
TypeConverter.
Tabla 1.6. Miembros de la Clase TypeConverter
1.2.5.2 Métodos públicos
CanConvertFrom
CanConvertTo
ConvertFrom
Sobrecargado. Devuelve si este conversor
puede convertir un objeto de un tipo al tipo
de este conversor.
Sobrecargado. Devuelve si este conversor
puede convertir el objeto al tipo
especificado.
Sobrecargado. Convierte el valor dado al
6
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemcomponentmodeltypeconverterclasstopic.asp
junio 3 de 2006
39
Jenaro C. Paz
________________________________________________________________________
ConvertFromInvariantString
ConvertFromString
ConvertTo
ConvertToInvariantString
ConvertToString
CreateInstance
Equals (se hereda de Object)
GetCreateInstanceSupported
GetHashCode (se hereda de Object)
.
GetProperties
GetPropertiesSupported
GetStandardValues
GetStandardValuesExclusive
GetStandardValuesSupported
GetType (se hereda de Object)
IsValid
40
tipo de este conversor.
Sobrecargado. Convierte el valor a un tipo
de este conversor, utilizando la referencia
cultural invariable.
Sobrecargado. Convierte el texto
especificado a un objeto.
Sobrecargado. Convierte el objeto de valor
dado al tipo especificado.
Sobrecargado. Convierte el valor
especificado a una representación de cadena
invariable de la referencia cultural.
Sobrecargado. Convierte el valor
especificado a una representación de
cadena.
Sobrecargado. Vuelve a crear un Object
dado un conjunto de valores de propiedad
del objeto.
Sobrecargado. Determina si dos instancias
de Object son iguales.
Sobrecargado. Devuelve si al cambiar un
valor de este objeto es necesario llamar a
CreateInstance para crear un nuevo valor.
Sirve como función hash para un tipo
concreto, apropiado para su utilización en
algoritmos de hash y estructuras de datos
como las tablas hash.
Sobrecargado. Devuelve una colección de
propiedades para el tipo de matriz
especificado por el valor del parámetro.
Sobrecargado. Devuelve si este objeto
admite propiedades.
Sobrecargado. Devuelve una colección de
valores estándar para el tipo de datos para el
que está diseñado este conversor de tipos.
Sobrecargado. Devuelve si la colección de
valores estándar devueltos por
GetStandardValues es una lista exclusiva.
Sobrecargado. Devuelve si este objeto
admite un conjunto estándar de valores que
se pueden seleccionar de una lista.
Obtiene el objeto Type de la instancia
actual.
Sobrecargado. Devuelve si el valor de
Textos Universitarios / Serie Docencia
________________________________________________________________________
ToString (se hereda de Object)
objeto dado es válido para este tipo.
Devuelve un objeto String que representa al
objeto Object actual.
La clase ColorConverter que ahora veremos se usa para convertir colores de un tipo de
datos a otro. Esta clase se hereda de la clase TypeConverter, quien define la
funcionalidad en la conversión de los tipos y la forma de acceder a los valores y
propiedades de ellos. En el Capítulo 5 Fuentes y Texto veremos la clase FontConverter.
1.2.6 Clase ColorConverter7
Requisitos
Espacio de nombres: System.Drawing
Convierte colores de un tipo de datos a otro. Se tiene acceso a esta clase mediante
TypeDescriptor.
1.2.6.1 Constructores públicos
ColorConverter (Constructor)
Inicializa una nueva instancia de la clase
ColorConverter.
Tabla 1.7. Miembros de la Clase ColorConverter
7
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdrawingcolorconverterclasstopic.asp
junio 3 2006
41
Jenaro C. Paz
________________________________________________________________________
1.2.6.2 Métodos públicos
CanConvertFrom
CanConvertTo
ConvertFrom
ConvertFromInvariantString (se hereda
de TypeConverter)
ConvertFromString (se hereda de
TypeConverter)
ConvertTo
ConvertToInvariantString (se hereda de
TypeConverter)
ConvertToString (se hereda de
TypeConverter)
CreateInstance (se hereda de
TypeConverter)
Equals (se hereda de Object)
GetCreateInstanceSupported (se hereda
de TypeConverter)
GetHashCode (se hereda de Object)
GetProperties (se hereda de
TypeConverter)
GetPropertiesSupported (se hereda de
TypeConverter)
GetStandardValues
GetStandardValuesExclusive (se hereda
de TypeConverter)
GetStandardValuesSupported
GetType (se hereda de Object)
IsValid (se hereda de TypeConverter)
42
Sobrecargado.
Sobrecargado.
Sobrecargado.
Sobrecargado. Convierte el valor a un tipo
de este conversor, utilizando la referencia
cultural invariable.
Sobrecargado. Convierte el texto
especificado a un objeto.
Sobrecargado.
Sobrecargado. Convierte el valor
especificado a una representación de cadena
invariable de la referencia cultural.
Sobrecargado. Convierte el valor
especificado a una representación de
cadena.
Sobrecargado. Vuelve a crear un Object
dado un conjunto de valores de propiedad
del objeto.
Sobrecargado. Determina si dos instancias
de Object son iguales.
Sobrecargado. Devuelve si al cambiar un
valor de este objeto es necesario llamar a
CreateInstance para crear un nuevo valor.
Sirve como función hash para un tipo
concreto, apropiado para su utilización en
algoritmos de hash y estructuras de datos
como las tablas hash.
Sobrecargado. Devuelve una colección de
propiedades para el tipo de matriz
especificado por el valor del parámetro.
Sobrecargado. Devuelve si este objeto
admite propiedades.
Sobrecargado.
Sobrecargado. Devuelve si la colección de
valores estándar devueltos por
GetStandardValues es una lista exclusiva.
Sobrecargado.
Obtiene el objeto Type de la instancia
actual.
Sobrecargado. Devuelve si el valor de
objeto dado es válido para este tipo.
Textos Universitarios / Serie Docencia
________________________________________________________________________
ToString (se hereda de Object)
Devuelve un objeto String que representa al
objeto Object actual.
1.2.6.3 Métodos protegidos
Finalize (se hereda de Object)
Reemplazado. Permite que un objeto Object
intente liberar recursos y realizar otras
operaciones de limpieza antes de que el
objeto Object sea reclamado por el
recolector de elementos no utilizados.
En C# y C++, los finalizadores se expresan
mediante la sintaxis del destructor.
GetConvertFromException (se hereda de Devuelve una excepción que se va a iniciar
cuando no puede realizarse una conversión.
TypeConverter)
Devuelve una excepción que se va a iniciar
GetConvertToException (se hereda de
cuando no puede realizarse una conversión.
TypeConverter)
MemberwiseClone (se hereda de Object) Crea una copia superficial del objeto Object
actual.
Ordena una colección de propiedades.
SortProperties (se hereda de
TypeConverter)
Ejemplos
C#
String strColor = “#FF00FF”
ColorConverter colorConverter = new ColorConverter();
Color myClr = (Color)colorConverter.ConvertFromString(strColor);
Con la finalidad de hacer la tarea de conversión de colores en diferentes formatos más
fácil, veamos cuales son sus miembros:
1.2.7 Clase ColorTranslator8
Requisitos
Espacio de nombres: System.Drawing
Convierte colores a y de estructuras Color GDI+. No se puede heredar esta clase.
8
Traducción de la referencia en línea de MSDN (Microsoft Developer Network) por J.C. Paz
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemdrawingcolortranslatorclasstopic.asp
junio 3 de 2006
43
Jenaro C. Paz
________________________________________________________________________
1.2.7.1 Métodos públicos
FromHtml
FromOle
FromWin32
ToHtml
ToOle
ToWin32
Convierte la representación de un color
HTML en una estructura Color GDI+.
Convierte el valor de un color OLE en una
estructura Color GDI+.
Convierte el valor de un color de Windows
en una estructura Color GDI+.
Convierte la estructura Color especificada
en una representación de cadena de un color
HTML.
Convierte la estructura Color especificada
en un color OLE.
Convierte la estructura Color especificada
en un color de Windows.
Tabla 1.8. Miembros de la Clase ColorTranslator
44
Textos Universitarios / Serie Docencia
________________________________________________________________________
Ejemplos
C#
// Crear una representacion en cadena de caracteres de un color HTML
string htmlColor = "Blue";
// Traducir htmlColor a una estructura Color de GDI+
Color myColor = ColorTranslator.FromHtml(htmlColor);
// rellenar un rectangulo con myColor.
g.FillRectangle(new SolidBrush(myColor),0,0,100,100);
// Crear una representacion entera de un color OLE
int oleColor = 0xFF00;
// Traducir htmlColor a una estructura Color de GDI+
Color myColor = ColorTranslator.FromOle(oleColor);
// rellenar un rectangulo con myColor.
g.FillRectangle(new SolidBrush(myColor),10,30,200,100);
// Crear una representacion entera de un color Windows.
int winColor = 0xA000;
// Traducir winColor a una estructura Color de GDI+
Color myColor = ColorTranslator.FromWin32(winColor);
// rellenar un rectangulo con myColor.
g.FillEllipse(new SolidBrush(myColor),10,30,200,100);
// Crear una instancia de la estructura Color.
Color myColor = Color.Red;
// Traducir myColor a un color HTML.
string htmlColor = ColorTranslator.ToHtml(myColor);
// Crear una instancia de la estructura Color.
Color myColor = Color.Red;
// Traducir myColor a un color OLE.
int oleColor = ColorTranslator.ToOle(myColor);
// Crear una instancia de la estructura Color.
Color myColor = Color.Red;
// Traducir myColor a un color Win32.
int winColor = ColorTranslator.ToWin32(myColor);
45
Jenaro C. Paz
________________________________________________________________________
46
Descargar