Capítulo 4 Pinceles y Plumas

Transcripción

Capítulo 4 Pinceles y Plumas
Textos Universitarios / Serie Docencia
________________________________________________________________________
Capítulo 4
Pinceles y Plumas
En el capítulo anterior vimos que para dibujar una figura, ya sea línea, rectángulo o
trazo, es necesario el uso de una pluma (pen) y que para poder rellenar el interior de ellas
era necesario el uso de un pincel (brush). En este capítulo estudiaremos en detalle como
crear y usar varios tipos de pinceles y plumas.
4.1 Uso de pinceles en GDI+
En la biblioteca del Framework.NET hay dos espacios de nombres donde encontramos
definida la funcionalidad para trabajar con pinceles: el espacio de nombres
System.Drawing que define clases y funcionalidad de pinceles genéricos y el espacio de
nombres System.Drawing.Drawing2D que define funcionalidad avanzada en 2D para
los pinceles. En el espacio de nombres System.Drawing encontramos las clases Brush,
SolidBrush, TextureBrush y Brushes y en el espacio de nombres
System.Drawing.Drawing2D encontramos las clases HatchBrush, GradientBrush y
PathGradientBrush que son mas elaboradas.
4.1.1 Clase Brush15
Requisitos
Espacio de nombres: System.Drawing.Brush
Las clases derivadas de esta clase base abstracta definen objetos utilizados para rellenar
el interior de formas gráficas, como rectángulos, elipses, gráficos circulares, polígonos y
rutas o trazos.
Figura 4.1. Clases heredadas de la clase Brush
15
http://msdn2.microsoft.com/en-us/library/system.drawing.brush(VS.80).aspx
Junio 3 de 2006
135
Jenaro C. Paz
________________________________________________________________________
4.1.1.1 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose .
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
ToString (se hereda de Object)
Cuando se anula en una clase derivada, crea
una copia exacta de este objeto Brush.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Sobrecargado.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
esta instancia.
Devuelve un objeto String que representa al
objeto Object actual.
4.1.1.2 Métodos protegidos
Finalize
Reemplazado. Vea Object.Finalize.
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.
4.1.2 Clase SolidBrush16
Requisitos
Espacio de nombres: System.Drawing.SolidBrush
Define un pincel de un solo color. Los pinceles se utilizan para rellenar formas de
gráficos, por ejemplo rectángulos, elipses, gráficos circulares y rutas o trazos. No se
puede heredar esta clase.
16
http://msdn2.microsoft.com/en-us/library/system.drawing.solidbrush(VS.80).aspx
Junio 3 de 2006
136
Textos Universitarios / Serie Docencia
________________________________________________________________________
4.1.2.1 Constructores públicos
SolidBrush (Constructor)
Inicializa un nuevo objeto SolidBrush del
color especificado.
4.1.2.2 Propiedades públicas
Color
Obtiene o establece el color de este objeto
SolidBrush.
4.1.2.3 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose (se hereda de Brush)
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
ToString (se hereda de Object)
Reemplazado. Crea una copia exacta de este
objeto SolidBrush.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Sobrecargado.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
esta instancia.
Devuelve un objeto String que representa al
objeto Object actual.
4.1.2.4 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
137
Jenaro C. Paz
________________________________________________________________________
actual.
4.1.2.5 El uso de SolidBrush en una forma Web
Los listados 18b, 19b, 20b, 21b, 22b y 23b son ejemplos del uso de SolidBrush para
rellenar diferente tipo de formas. Solo para resumir incluimos el siguiente segmento de
código en donde se crea una pincel redBrush de color sólido y se rellena el interior de un
rectángulo haciendo uso de el.
SolidBrush redBrush = new SolidBrush(Color.Red);
Rectangle rect = new Rectangle(150, 80, 200, 140);
g.FillRectangle(redBrush, rect);
redBrush.Dispose();
4.1.3 Clase TextureBrush17
Requisitos
Espacio de nombres: System.Drawing.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. No se puede heredar esta clase.
4.1.3.1 Constructores públicos
TextureBrush (Constructor)
Sobrecargado. Inicializa un nuevo objeto
TextureBrush que utiliza la imagen
especificada.
4.1.3.2 Propiedades públicas
Image
Transform
WrapMode
17
Obtiene el objeto Image asociado a este
objeto TextureBrush.
Obtiene o establece un objeto Matrix que
define una transformación geométrica local
para la imagen asociada a este objeto
TextureBrush.
Obtiene o establece una enumeración
WrapMode que indica el modo de ajuste de
este objeto TextureBrush.
http://msdn2.microsoft.com/en-us/library/system.drawing.texturebrush(VS.80).aspx
Junio 3 de 2006
138
Textos Universitarios / Serie Docencia
________________________________________________________________________
4.1.3.3 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose (se hereda de Brush)
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
MultiplyTransform
ResetTransform
RotateTransform
ScaleTransform
ToString (se hereda de Object)
TranslateTransform
Reemplazado. Crea una copia exacta de este
objeto TextureBrush.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Sobrecargado.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
esta instancia.
Sobrecargado. Multiplica el objeto Matrix
que representa la transformación geométrica
local de este objeto TextureBrush por el
objeto Matrix especificado, en el orden
indicado.
Restablece la propiedad Transform de este
objeto TextureBrush en identidad.
Sobrecargado. Gira la transformación
geométrica local de este objeto
TextureBrush en la cantidad especificada.
Este método antepone la rotación a la
transformación.
Sobrecargado. Cambia el tamaño de la
transformación geométrica local de este
objeto TextureBrush en la cantidad
especificada. Este método antepone la
matriz de escala a la transformación.
Devuelve un objeto String que representa al
objeto Object actual.
Sobrecargado. Desplaza la transformación
geométrica local de este objeto
139
Jenaro C. Paz
________________________________________________________________________
TextureBrush en las dimensiones y en el
orden especificados.
4.1.3.4 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.
4.1.3.5 El uso de TextureBrush en una forma Web
Forma PaintBrushes01.aspx
Figura 4.2. Forma Web para trabajar con Pinceles
PaintBrushes01.aspx.cs
using System;
140
Textos Universitarios / Serie Docencia
________________________________________________________________________
using
using
using
using
using
using
using
using
using
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
namespace JCPGraphics
{
/// <summary>
/// Descripción breve de DibujaCuadro.
/// </summary>
public class PaintBrushes01 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtWidth;
protected System.Web.UI.WebControls.Button btnBuild;
protected System.Web.UI.WebControls.DropDownList ColorList;
protected System.Web.UI.WebControls.TextBox txtHeight;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.btnBuild.Click += new
System.EventHandler(this.btnBuild_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPaintBrushes01.aspx?valueH=" + recHeight +
"&valueW=" + recWidth + "&valueC=" + theColor + "'>"+
"</p>");
}
}
141
Jenaro C. Paz
________________________________________________________________________
}
ServerPaintBrushes01.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace JCPGraphics
{
public class ServerPaintBrushes01 : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// +++++++++++++++Begins section related with this Server
142
Textos Universitarios / Serie Docencia
________________________________________________________________________
//
Bitmap bitmap = new Bitmap(Server.MapPath("Textura.png"));
TextureBrush tbrush = new TextureBrush(bitmap);
g.FillRectangle(tbrush,bgRect);
g.FillRectangle(new SolidBrush(Color.FromArgb(180, bgColor)),
bgRect);
Pen colorPen = new Pen(bgColor,8);
g.DrawRectangle(colorPen,bgRect);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.3. Pintando un lienzo con Pinceles de Textura y Sólidos
4.1.4 Clase HatchBrush18
Requisitos
Espacio de nombres: System.Drawing.Drawing2D.HatchBrush
18
http://msdn2.microsoft.com/en-us/library/system.drawing.drawing2d.hatchbrush(VS.80).aspx
Junio 3 de 2006
143
Jenaro C. Paz
________________________________________________________________________
Define un pincel rectangular con un estilo de trama, un color de primer plano y un color
de fondo. No se puede heredar esta clase.
4.1.4.1 Constructores públicos
HatchBrush (Constructor)
Sobrecargado. Inicializa una nueva instancia
de la clase HatchBrush con la enumeración
HatchStyle y el color de primer plano
especificados.
4.1.4.2 Propiedades públicas
BackgroundColor
ForegroundColor
HatchStyle
Obtiene el color de los espacios entre las
líneas de trama dibujadas por este objeto
HatchBrush.
Obtiene el color de las líneas de trama
dibujadas por este objeto HatchBrush.
Obtiene el estilo de trama de este objeto
HatchBrush.
4.1.4 3 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose (se hereda de Brush)
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
ToString (se hereda de Object)
144
Reemplazado. Crea una copia exacta de este
objeto HatchBrush.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Sobrecargado.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
esta instancia.
Devuelve un objeto String que representa al
objeto Object actual.
Textos Universitarios / Serie Docencia
________________________________________________________________________
4.1.4 4 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.
4.1.4.5 El uso de HatchBrush en una forma Web
PaintBrushes02.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPaintBrushes02.aspx?valueH=" +
recHeight + "&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerPaintBrushes02.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace JCPGraphics
{
public class ServerPaintBrushes02 : System.Web.UI.Page
145
Jenaro C. Paz
________________________________________________________________________
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
HatchBrush hbrush = new HatchBrush(HatchStyle.DiagonalBrick,
Color.Green, Color.FromArgb(200, Color.Yellow));
g.FillEllipse(hbrush,bgRect.X+10,bgRect.Y+10,
bgRect.Width-20,bgRect.Height-20);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Estilos para pinceles HatchBrush
BackwardDiagonal
DarkVertical
DiagonalBrick
ForwardDiagonal
LargeGrid
Max
Percent05
146
Cross
DashedDownwardDiagonal
DiagonalCross
Horizontal
LightDownwardDiagonal
Min
Percent10
DarkDownwardDiagonal
DashedHorizontal
Divot
HorizontalBrick
LightHorizontal
NarrowHorizontal
Percent20
DarkHorizontal
DashedUpwardDiagonal
DottedDiamond
LargeCheckerBoard
LightUpwardDiagonal
NarrowVertical
Percent25
DarkUpwardDiagonal
DashedVertical
DottedGrid
LargeConfetti
LightVertical
OutlinedDiamond
Percent30
Textos Universitarios / Serie Docencia
________________________________________________________________________
Percent40
Percent80
SmallConfetti
Vertical
ZigZag
Percent50
Percent90
SmallGrid
Wave
Percent60
Plaid
SolidDiamond
Weave
Percent70
Shingle
Sphere
WideDownwardDiagonal
Percent75
SmallCheckerBoard
Trellis
WideUpwardDiagonal
Figura 4.4. Pinceles HatchBrush con estilos ForwardDiagonal, DiagonalBrick y Wave
4.1.5 Clase LinearGradientBrush19
Requisitos
Espacio de nombres: System.Drawing.Drawing2D.LinearGradientBrush
Encapsula un objeto Brush con un degradado lineal. No se puede heredar esta clase.
4.1.5.1 Constructores públicos
LinearGradientBrush (Constructor)
Sobrecargado. Inicializa una nueva instancia
de la clase LinearGradientBrush con los
puntos y colores especificados.
19
http://msdn2.microsoft.com/en-us/library/system.drawing.drawing2d.lineargradientbrush(VS.80).aspx
Junio 3 de 2006
147
Jenaro C. Paz
________________________________________________________________________
4.1.5.2 Propiedades públicas
Blend
GammaCorrection
InterpolationColors
LinearColors
Rectangle
Transform
WrapMode
Obtiene o establece un objeto Blend que
especifica las posiciones y factores que
definen una disminución personalizada para
el degradado.
Obtiene o establece un valor que indica si se
habilitó la corrección gamma para este
objeto LinearGradientBrush.
Obtiene o establece un objeto ColorBlend
que define un degradado lineal de varios
colores.
Obtiene o establece los colores inicial y
final del degradado.
Obtiene un área rectangular que define los
puntos inicial y final del degradado.
Obtiene o establece un objeto Matrix que
define una transformación geométrica local
para este objeto LinearGradientBrush.
Obtiene o establece una enumeración
WrapMode que indica el modo de ajuste de
este LinearGradientBrush.
4.1.5.3 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose (se hereda de Brush)
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
148
Reemplazado. Crea una copia exacta de este
objeto LinearGradientBrush.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Sobrecargado.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
Textos Universitarios / Serie Docencia
________________________________________________________________________
MultiplyTransform
ResetTransform
RotateTransform
ScaleTransform
SetBlendTriangularShape
SetSigmaBellShape
ToString (se hereda de Object)
TranslateTransform
esta instancia.
Sobrecargado. Multiplica el objeto Matrix
que representa la trasformación geométrica
local de este objeto LinearGradientBrush
por el objeto Matrix anteponiéndole el
objeto Matrix especificado.
Restablece la propiedad Transform en
identidad.
Sobrecargado. Gira la transformación
geométrica local la cantidad especificada.
Este método antepone la rotación a la
transformación.
Sobrecargado. Cambia el tamaño de la
transformación geométrica local en las
cantidades especificadas. Este método
antepone la matriz de escala a la
transformación.
Sobrecargado. Crea un degradado lineal con
un color central y una disminución lineal
hacia un único color en ambos extremos.
Sobrecargado. Crea una disminución de
degradado basada en una curva en forma de
campana.
Devuelve un objeto String que representa al
objeto Object actual.
Sobrecargado. Convierte la transformación
geométrica local en las dimensiones
especificadas. Este método antepone la
conversión a la transformación.
4.1.5.4 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.
4.1.5.5 El uso de LinearGradientBrush en una forma Web
149
Jenaro C. Paz
________________________________________________________________________
PaintBrushes03.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPaintBrushes03.aspx?valueH=" +
recHeight + "&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerPaintBrushes03.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace JCPGraphics
{
public class ServerPaintBrushes03 : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
150
Textos Universitarios / Serie Docencia
________________________________________________________________________
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
Rectangle rect = new Rectangle(bgRect.X+10,
bgRect.Y+10,bgRect.Width-20,bgRect.Height-20);
LinearGradientBrush lbrush = new LinearGradientBrush(rect,
Color.Blue, Color.Turquoise,
LinearGradientMode.ForwardDiagonal);
g.FillEllipse(lbrush,rect);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
LinearGradientMode
BackwardDiagonal
ForwardDiagonal
Horizontal
Vertical
151
Jenaro C. Paz
________________________________________________________________________
Figura 4.5. Pinceles LinearGradientBrush con estilos ForwardDiagonal, Horizontal y Vertical
4.1.6 Clase PathGradientBrush20
Requisitos
Espacio de nombres: System.Drawing.Drawing2D.PathGradientBrush
Encapsula un objeto Brush que rellena el interior de un objeto GraphicsPath con un
degradado. No se puede heredar esta clase.
4.1.6.1 Constructores públicos
PathGradientBrush (Constructor)
Sobrecargado. Inicializa una nueva instancia
de la clase PathGradientBrush con el
trazado especificado.
4.1.6.2 Propiedades públicas
Blend
CenterColor
20
Obtiene o establece un objeto Blend que
especifica las posiciones y factores que
definen una disminución personalizada para
el degradado.
Obtiene o establece el color en el centro del
trazado del degradado.
http://msdn2.microsoft.com/en-us/library/system.drawing.drawing2d.pathgradientbrush(VS.80).aspx
Junio 3 ,de 2006
152
Textos Universitarios / Serie Docencia
________________________________________________________________________
CenterPoint
FocusScales
InterpolationColors
Rectangle
SurroundColors
Transform
WrapMode
Obtiene o establece el punto central del
trazado del degradado.
Obtiene o establece el punto de foco para la
disminución del degradado.
Obtiene o establece un objeto ColorBlend
que define un degradado lineal de varios
colores.
Obtiene un rectángulo delimitador para este
objeto PathGradientBrush.
Obtiene o establece una matriz de colores
que corresponde a los puntos del trazado
que rellena este objeto
PathGradientBrush.
Obtiene o establece un objeto Matrix que
define una transformación geométrica local
para este objeto PathGradientBrush.
Obtiene o establece una enumeración
WrapMode que indica el modo de ajuste de
este objeto PathGradientBrush.
4.1.6.3 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose (se hereda de Brush)
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
MultiplyTransform
Reemplazado. Crea una copia exacta de este
objeto PathGradientBrush.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Sobrecargado.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
esta instancia.
Sobrecargado. Multiplica el objeto Matrix
153
Jenaro C. Paz
________________________________________________________________________
ResetTransform
RotateTransform
ScaleTransform
SetBlendTriangularShape
SetSigmaBellShape
ToString (se hereda de Object)
TranslateTransform
que representa la trasformación geométrica
local de este objeto PathGradientBrush
por el objeto Matrix especificado,
anteponiéndole el objeto Matrix
especificado.
Restablece la propiedad Transform en
identidad.
Sobrecargado. Aplica a la transformación
geométrica local un giro del ángulo
especificado y en el sentido de las agujas del
reloj.
Sobrecargado. Cambia el tamaño de la
transformación geométrica local en las
cantidades especificadas. Este método
antepone la matriz de escala a la
transformación.
Sobrecargado. Crea un degradado con un
color central y una disminución lineal hacia
un color que lo rodea.
Sobrecargado. Crea una disminución de
degradado entre el color central y el primer
color que lo rodea basándose en una curva
en forma de campana.
Devuelve un objeto String que representa al
objeto Object actual.
Sobrecargado. Aplica la conversión
especificada a la transformación geométrica
local. Este método antepone la conversión a
la transformación.
4.1.6.4 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.
154
Textos Universitarios / Serie Docencia
________________________________________________________________________
4.1.6.5 El uso de PathGradientBrush en una forma Web
PaintBrushes04.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPaintBrushes04.aspx?valueH=" +
recHeight + "&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerPaintBrushes04.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace JCPGraphics
{
public class ServerPaintBrushes04 : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
155
Jenaro C. Paz
________________________________________________________________________
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
GraphicsPath path = new GraphicsPath(new Point[] {
new Point(140, 30),
new Point(235, 70),
new Point(105, 95),
new Point(170, 200),
new Point(50, 220),
new Point(20, 50),
}, new byte[] {
(byte)PathPointType.Start,
(byte)PathPointType.Bezier,
(byte)PathPointType.Bezier,
(byte)PathPointType.Bezier,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
});
/* Segundo ejemplo
GraphicsPath path = new GraphicsPath(new Point[] {
new Point(195, 30),
new Point(217, 99),
new Point(290, 99),
new Point(231, 142),
new Point(253, 210),
new Point(195, 168),
new Point(137, 210),
new Point(159, 142),
new Point(100, 99),
new Point(173, 99),
new Point(195, 30)
}, new byte[] {
(byte)PathPointType.Start,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line
});
156
Textos Universitarios / Serie Docencia
________________________________________________________________________
*/
PathGradientBrush pgbrush = new PathGradientBrush(path);
pgbrush.CenterColor = Color.FromArgb(255, 255, 0, 0);
Color[] colors = {Color.FromArgb(255, 255, 155, 0)};
pgbrush.SurroundColors= colors;
g.FillPath(pgbrush, path);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.6. Pinceles PathGradientBrush
157
Jenaro C. Paz
________________________________________________________________________
Otra aplicación:
PaintWithBrushes.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
Response.Write("<img border='0'
src='ServerPaintWithBrushes.aspx?valueH=" + recHeight +
"&valueW=" + recWidth + "'>");
Response.Write("<p><font color=red>Draw a
Image!</font></p>");
}
ServerPaintWithBrushes.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Drawing.Drawing2D;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerPaintWithBrushes : System.Web.UI.Page
{
int w1,h1;
Color bgColor=Color.LightGray;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
158
Textos Universitarios / Serie Docencia
________________________________________________________________________
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
// Select a pen
Pen bluePen = new Pen(Color.Blue,3);
// Load an Image from root Folder
Bitmap backgroundImage =
new Bitmap (Server.MapPath("colorbars.jpg"));
Brush backgroundBrush = new TextureBrush(backgroundImage);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.FillRectangle(backgroundBrush, bgRect);
g.FillRectangle(new SolidBrush(Color.FromArgb(180,
Color.White)), bgRect);
//Add a Violet rectangle and a Beige one that overlaps it
g.FillRectangle(new SolidBrush(Color.Violet),
20, 20, 60, 50);
g.FillRectangle(new SolidBrush(Color.FromArgb(180,
Color.Yellow)), 40, 40, 50, 60);
//Add an ellipse that is filled with a translucent hatch
HatchBrush hb = new HatchBrush(HatchStyle.Cross,
Color.Chocolate, Color.FromArgb(100, Color.Yellow));
g.FillEllipse(hb, 180, 20, 160, 80);
//Now create a rectangle filled with a gradient brush
Rectangle r = new Rectangle(260, 120, 100, 100);
LinearGradientBrush lb = new LinearGradientBrush(r,
Color.Green, Color.Turquoise,
LinearGradientMode.ForwardDiagonal);
g.FillRectangle(lb, r);
//Now add a shape drawn with a path gradient brush
GraphicsPath path = new GraphicsPath(new Point[] {
new Point(80, 140),
new Point(145, 200),
new Point(200, 305),
new Point(130, 360),
new Point(50, 290),
new Point(20, 130),
},
new byte[] {
(byte)PathPointType.Start,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
159
Jenaro C. Paz
________________________________________________________________________
(byte)PathPointType.Line,
(byte)PathPointType.Line,
}
);
PathGradientBrush pgb = new PathGradientBrush(path);
pgb.SurroundColors = new Color[] {
Color.Green,
Color.Yellow,
Color.Red,
Color.Blue,
Color.Orange,
Color.Violet,
};
g.FillPath(pgb, path);
//Now add a simple rectangle that has been rotated
g.RotateTransform(-35);
g.FillRectangle(new SolidBrush(Color.Blue),
40, 360, 65, 85);
g.ResetTransform();
g.DrawRectangle(bluePen,bgRect);
//
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
160
Textos Universitarios / Serie Docencia
________________________________________________________________________
Figura 4.7. Pinceles SolidBrush, TextureBrush, LinearGradientBrush y PathGradientBrush
4.2 Uso de plumas en GDI+
Las plumas son otro objeto importante en GDI+. Como mencionamos anteriormente, se
usan para dibujar líneas y curvas y el contorno de figuras graficas. Una pluma dibuja
líneas y curvas con un ancho específico y cierto estilo. El objeto Pen provee miembros
para establecer el ancho y estilo de una pluma. Las plumas pueden ser de varios tipos de
líneas continuas o punteadas y de diferente estilo en la manera de rellenar. El proceso de
dibujar una línea crea una region en la forma de una línea ensanchada y esa region es
rellenada con un pincel. Las líneas punteadas se representan por estilos dash. Los estilos
para rellenar pueden ser sólidos o texturas dependiendo del pincel que se usa para crear la
pluma.
En esta sección veremos como crear plumas en GDI+; las clases Pen y Pens y como crear
estilos dash, cap y de línea para las plumas.
La clase Pen representa una pluma en GDI+. Usando el constructor de la clase Pen, se
puede crear un objeto de un objeto Brush o Color especificando el ancho de la pluma.
4.2.1 Clase Pens21
Requisitos
Espacio de nombres: System.Drawing.Pens
Plumas de todos los colores estándar. No se puede heredar esta clase.
21
http://msdn2.microsoft.com/en-us/library/system.drawing.pens(VS.80).aspx
Junio 3 de 2006
161
Jenaro C. Paz
________________________________________________________________________
4.2.1.1 Propiedades públicas (
Obtiene Pen definido por el sistema con un
ancho de 1.)
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
DarkOliveGreen
DarkOrange
DarkOrchid
DarkRed
DarkSalmon
DarkSeaGreen
DarkSlateBlue
DarkSlateGray
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
LightCoral
LightCyan
LightGoldenrodYellow
LightGray
LightGreen
LightPink
LightSalmon
LightSeaGreen
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
OrangeRed
Orchid
PaleGoldenrod
PaleGreen
PaleTurquoise
PaleVioletRed
PapayaWhip
PeachPuff
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
Wheat
White
WhiteSmoke
Yellow
YellowGreen
La clase Pens como se muestra en la Tabla anterior, tiene propiedades estáticas para
todos los colores estándar, que regresan objetos Pen de color. Las siguientes instrucciones
crean tres objetos Pen usando la clase Pens.
Pen myPen1 = Pens.LightGreen;
Pen myPen2 = Pens.Yellow;
Pen myPen3 = Pens.Lavender;
162
Textos Universitarios / Serie Docencia
________________________________________________________________________
4.2.2 Clase Pen22
Requisitos
Espacio de nombres: System.Drawing.Pen
Define un objeto para dibujar líneas y curvas. No se puede heredar esta clase.
4.2.2.1 Constructores públicos
Pen (Constructor)
Sobrecargado. Inicializa una nueva instancia
de la clase Pen con el color especificado.
4.2.2.2 Propiedades públicas
Alignment
Brush
Color
CompoundArray
CustomEndCap
CustomStartCap
DashCap
DashOffset
DashPattern
DashStyle
Obtiene o establece la alineación para este
objeto Pen.
Obtiene o establece el objeto Brush que
determina los atributos de este objeto Pen.
Obtiene o establece el color de este objeto
Pen.
Obtiene o establece una matriz de valores
que especifica un lápiz compuesto. Un lápiz
compuesto dibuja una línea compuesta
formada por líneas y espacios paralelos.
Obtiene o establece un extremo
personalizado que se utiliza al final de las
líneas dibujadas con este objeto Pen.
Obtiene o establece un extremo
personalizado que se usa en el comienzo de
las líneas dibujadas con este objeto Pen.
Obtiene o establece el estilo del extremo
que se utiliza al final de los guiones que
forman las líneas discontinuas dibujadas con
este objeto Pen.
Obtiene o establece la distancia desde el
comienzo de una línea hasta el comienzo de
un modelo de guiones.
Obtiene o establece una matriz de guiones y
espacios personalizados.
Obtiene o establece el estilo de las líneas
discontinuas dibujadas con este objeto Pen.
22
http://msdn2.microsoft.com/en-us/library/system.drawing.pen(VS.80).aspx
Junio 3 de 2006
163
Jenaro C. Paz
________________________________________________________________________
EndCap
LineJoin
MiterLimit
PenType
StartCap
Transform
Width
Obtiene o establece el estilo de cierre que se
utiliza al final de las líneas dibujadas con
este objeto Pen.
Obtiene o establece el estilo de combinación
de los extremos de dos líneas consecutivas
dibujadas con este objeto Pen.
Obtiene o establece el límite del grosor de la
combinación en una esquina en ángulo.
Obtiene el estilo de las líneas dibujadas con
un objeto Pen.
Obtiene o establece el estilo de cierre que se
utiliza al comienzo de las líneas dibujadas
con este objeto Pen.
Obtiene o establece la transformación
geométrica para este objeto Pen.
Obtiene o establece el ancho de este objeto
Pen.
4.2.2.3 Métodos públicos
Clone
CreateObjRef (se hereda de
MarshalByRefObject)
Dispose
Equals (se hereda de Object)
GetHashCode (se hereda de Object)
GetLifetimeService (se hereda de
MarshalByRefObject)
GetType (se hereda de Object)
InitializeLifetimeService (se hereda de
MarshalByRefObject)
MultiplyTransform
164
Crea una copia exacta de este objeto Pen.
Crea un objeto que contiene toda la
información relevante necesaria para
generar un proxy utilizado para comunicarse
con un objeto remoto.
Libera todos los recursos utilizados por este
objeto Pen.
Sobrecargado. Determina si dos instancias
de Object son iguales.
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.
Recupera el objeto de servicio de duración
actual que controla la directiva de duración
de esta instancia.
Obtiene el objeto Type de la instancia
actual.
Obtiene un objeto de servicio de duración
para controlar la directiva de duración de
esta instancia.
Sobrecargado. Multiplica la matriz de
transformación de este objeto Pen por la
Matrix especificada.
Textos Universitarios / Serie Docencia
________________________________________________________________________
ResetTransform
RotateTransform
ScaleTransform
SetLineCap
ToString (se hereda de Object) .
TranslateTransform
Restablece la matriz de transformación
geométrica de este objeto Pen en identidad.
Sobrecargado. Gira la transformación
geométrica local el ángulo especificado.
Este método antepone la rotación a la
transformación.
Sobrecargado. Cambia el tamaño de la
transformación geométrica local en los
factores especificados. Este método
antepone la matriz de escala a la
transformación.
Establece los valores que determinan el
estilo de cierre que se utiliza para finalizar
las líneas dibujadas con este objeto Pen.
Devuelve un objeto String que representa al
objeto Object actual.
Sobrecargado. Convierte la transformación
geométrica local en las dimensiones
especificadas. Este método antepone la
conversión a la transformación.
4.2.2.4 Métodos protegidos
Reemplazado. Vea Object.Finalize.
Finalize
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.
4.2.2.5
El uso de diferente tipo de plumas en una forma Web
PaintPen01.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPaintPen01.aspx?valueH=" + recHeight +
"&valueW=" + recWidth + "&valueC=" + theColor + "'>"+
"</p>");
165
Jenaro C. Paz
________________________________________________________________________
}
ServerPaintPen01.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace JCPGraphics
{
public class ServerPaintPen01 : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
166
Textos Universitarios / Serie Docencia
________________________________________________________________________
SolidBrush blueBrush = new SolidBrush(Color.Blue);
HatchBrush hatchBrush =
new HatchBrush(HatchStyle.DashedVertical,
Color.Yellow, Color.Green);
// Create a pen from a solid brush with
// width 7
Pen pn1 = new Pen( blueBrush, 7);
// Create a pen from a hatch brush
Pen pn2 = new Pen(hatchBrush, 8);
// Create a pen from a Color structure
Pen pn3 = new Pen(Color.Red,5);
// Draw a line, ellipse, and rectangle
g.DrawLine(pn1, new Point(40, 40),
new Point(220, 220));
g.DrawEllipse(pn2, 20, 50, 160, 100);
g.DrawRectangle(pn3, 40, 90, 180, 100);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.8. Plumas sólidas y HatchBrush
PaintPen02.aspx.cs
167
Jenaro C. Paz
________________________________________________________________________
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPaintPen02.aspx?valueH=" + recHeight +
"&valueW=" + recWidth + "&valueC=" + theColor + "'>"+
"</p>");
}
ServerPaintPen02.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace JCPGraphics
{
public class ServerPaintPen02 : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
168
Textos Universitarios / Serie Docencia
________________________________________________________________________
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
Bitmap bitmap = new Bitmap(Server.MapPath("Textura.png"));
TextureBrush tbrush = new TextureBrush(bitmap);
Pen texturedPen = new Pen(tbrush, 30);
g.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
g.DrawRectangle(texturedPen, 30, 100, 160, 100);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.9. Uso de pluma generado con un pincel TextureBrush
4.3 Transformaciones de gráficos donde intervienen Plumas
169
Jenaro C. Paz
________________________________________________________________________
Una transformación es el proceso de cambiar objetos gráficos de un estado a otro.
Rotación, escalamiento, reflexión, translación y recorte son ejemplos de
transformaciones.
Vimos en el capitulo 3 que la clase Graphics contiene los métodos:
MultiplyTransform
ResetTransform
RotateTransform
ScaleTransform
TranslateTransform
Sobrecargado. Multiplica la transformación
universal del objeto Graphics y
especificada en el objeto Matrix.
Restablece la matriz de transformación
universal de este objeto Graphics en la
matriz de identidades.
Sobrecargado. Aplica la rotación
especificada a la matriz de transformación
de este objeto Graphics.
Sobrecargado. Aplica la operación de
cambio de escala especificada a la matriz de
transformación de este objeto Graphics,
anteponiéndola a esta última.
Sobrecargado. Antepone la conversión
especificada a la matriz de transformación
de este objeto Graphics.
Los cuales permiten llevar a cabo transformaciones sobre objetos gráficos que generemos
mediante plumas en un lienzo. A continuación se presenta el código que nos permite
dibujar una elipse horizontal en color rojo, luego rotarla 45 grados en el sentido de las
manecillas del reloj y volver a dibujarla en color verde, finalmente hacer una translación
horizontal de 200 pixeles a la derecha y volver a dibujarla en color azul.
C#
Pen pen1 = new Pen(Color.Black,1);
pen1.DashStyle=DashStyle.DashDot;
Pen pen2 = new Pen(Color.Brown,1);
pen1.DashStyle=DashStyle.DashDotDot;
//Draw an Ellipse
g.DrawEllipse(new Pen(Color.Red, 3), 80, 20, 200, 80);
//Draw two lines to the Red Ellipse
g.DrawLine(pen1,0,0,80,60);
g.DrawLine(pen2,0,0,280,60);
// Set world transform of graphics object to rotate 45 degrees.
g.RotateTransform(45.0F);
//Draw an Ellipse
g.DrawEllipse(new Pen(Color.Green, 3), 80, 20, 200, 80);
//Draw two lines to the Green Ellipse
g.DrawLine(pen1,0,0,80,60);
g.DrawLine(pen2,0,0,280,60);
// Then to translate, appending to world transform.
g.TranslateTransform(200.0F, 0.0F, MatrixOrder.Append);
// Draw rotated, translated ellipse to screen.
170
Textos Universitarios / Serie Docencia
________________________________________________________________________
g.DrawEllipse(new Pen(Color.Blue, 3), 80, 20, 200, 80);
Figura 4.10. Rotación y Translación de una Elipse horizontal
Obsérvese en la figura anterior, como con la rotación de 45 grados el punto 1 pasa a ser
el punto 2 y con la translación de 200 pixeles hacia la derecha el punto 2 pasa a ser el
punto 3.
Como veremos en el Capitulo 9 en donde explicaremos el tema de Transformaciones y
Matrices, cualquier punto (x,y) de la Elipse original se transforma en otro (x’,y’) de la
Elipse transformada bajo la relación mostrada a continuación:
[x'
& cos(45) sen(45) 0#
y ' 1]= $$' sen(45) cos(45) 0!![x
$% 200
0
1!"
y 1]
Por lo tanto:
x’ = .7071x - .7071y + 200
y’ = .7071x + .7071y
Además de estas transformaciones que podemos realizar al objeto grafico existen otras
que podemos efectuar a un objeto pluma, ya que también la clase Pen provee métodos
para transformar y rotar. El método RotateTransform rota una transformación un cierto
ángulo de tipo float y como segundo parámetro MatrixOrder que siendo optativo provee
un orden para operaciones de transformación con matrices. Los valores para dicha
enumeración son: Append y Prepend. El orden en las matrices es el orden en el cual una
matriz se multiplica por otras.
La diferencia entre Append y Prepend es el orden en la operación. Por ejemplo, si dos
operaciones están participando en un proceso, la segunda operación se llevara a cabo
después de la primera cuando el orden en las matrices es Append; cuando el orden es
Prepend, la segunda operación se llevará a cabo primero.
171
Jenaro C. Paz
________________________________________________________________________
El método MultiplyTransform multiplica una matriz de transformación por una pluma.
Su primer argumento es un objeto Matrix y el segundo argumento opcional es el orden de
la operación.
El método TranslateTransform de la clase Pen traslada una transformación por una
dimensión específica. Este método toma dos valores de tipo float para la translación en x
e y, luego un tercer parámetro opcional del tipo MatrixOrder.
A continuación se muestra el código de un ejemplo que hace uso de Transformaciones
sobre la pluma.
TransPens01.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerTransPens01.aspx?valueH=" + recHeight +
"&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerTransPens01.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
172
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
Textos Universitarios / Serie Docencia
________________________________________________________________________
public class ServerTransPens01 : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
// Create a Pen object
Pen Pen1 = new Pen(Color.Violet, 5);
Pen Pen2 = new Pen(Color.YellowGreen, 5);
// Apply rotate and scale transformations
Pen1.ScaleTransform(4, 1);
Pen2.ScaleTransform(4, 1);
g.DrawEllipse(Pen1, 20, 20, 100, 50);
g.DrawRectangle(Pen2, 20, 120, 100, 50);
Pen1.RotateTransform(45, MatrixOrder.Append);
Pen2.RotateTransform(45, MatrixOrder.Append);
g.DrawEllipse(Pen1, 160, 20, 100, 50);
g.DrawRectangle(Pen2, 160, 120, 100, 50);
Pen1.RotateTransform(45, MatrixOrder.Append);
Pen2.RotateTransform(45, MatrixOrder.Append);
g.DrawEllipse(Pen1, 300, 20, 100, 50);
g.DrawRectangle(Pen2, 300, 120, 100, 50);
// Dispose of objects
Pen1.Dispose();
Pen2.Dispose();
g.Dispose();
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
173
Jenaro C. Paz
________________________________________________________________________
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.11. Rotación de plumas para generar imágenes
El siguiente ejemplo hace uso de transformaciones de gráficos haciendo uso de los
métodos de la clase Graphics y en una segunda versión se muestra la forma en que se
puede utilizar la matriz de rotación para llevar a cabo una transformación para generar los
pétalos de la flor.
DoFlower.aspx.cs
private void btnGenerar_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
Response.Write("<img border='0'
src='ServerDoFlowerPath.aspx?valueH=" + recHeight +
"&valueW=" + recWidth + "'>");
Response.Write("<p><font color=red>Making an Image with <I>Path
and Transform</I>!</font></p>");
174
Textos Universitarios / Serie Docencia
________________________________________________________________________
}
ServerDoFlowerPath.aspx
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerDoFlowerPath : System.Web.UI.Page
{
int w1,h1;
Color bgColor=Color.BlanchedAlmond;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
/* First Method
int cx=w1;
175
Jenaro C. Paz
________________________________________________________________________
int cy=h1;
g.DrawBezier(new Pen(Color.Green,10),
new Point(cx,cy),
new Point(cx,3*cy/4),
new Point(3*cx/4,cy/4),
new Point(cx/2,cy/2));
float fScale = Math.Min(cx,cy)/2000f;
g.TranslateTransform(cx/2,cy/2);
g.ScaleTransform(fScale,fScale);
GraphicsPath path = new GraphicsPath();
path.AddBezier(new Point(0,0),
new Point(150,150),
new Point(450,150),
new Point(600,0));
path.AddBezier(new Point(600,0),
new Point(450,-150),
new Point(150,-150),
new Point(0,0));
for(int i=0; i < 8; i++)
{
g.FillPath(Brushes.Yellow,path);
g.DrawPath(Pens.Black,path);
g.RotateTransform(360/8);
}
Rectangle rect = new Rectangle(-150, -150, 300, 300);
g.FillEllipse(Brushes.Orange,rect);
g.DrawEllipse(Pens.Black,rect);
*/
//Second Method
int cx=w1;
int cy=h1;
g.DrawBezier(new Pen(Color.Green,10),
new Point(cx,cy),
new Point(cx,3*cy/4),
new Point(3*cx/4,cy/4),
new Point(cx/2,cy/2));
float fScale = Math.Min(cx,cy)/2000f;
g.TranslateTransform(cx/2,cy/2);
g.ScaleTransform(fScale,fScale);
GraphicsPath path = new GraphicsPath();
path.AddBezier(new Point(0,0),
new Point(150,150),
new Point(450,150),
new Point(600,0));
path.AddBezier(new Point(600,0),
new Point(450,-150),
new Point(150,-150),
new Point(0,0));
//---------------[using Matrix]-------------------\\
Matrix m = new Matrix(); //This is the Diagonal
m.Rotate(45);
for(int i=0; i < 8; i++)
{
g.FillPath(Brushes.Yellow,path);
g.DrawPath(Pens.Black,path);
path.Transform(m);
}
176
Textos Universitarios / Serie Docencia
________________________________________________________________________
//---------------[/using Matrix]------------------\\
Rectangle rect = new Rectangle(-150, -150, 300, 300);
g.FillEllipse(Brushes.Orange,rect);
g.DrawEllipse(Pens.Black,rect);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.12. Trayectorias Bezier y rotaciones para generar imágenes
177
Jenaro C. Paz
________________________________________________________________________
En este otro ejemplo se hace uso también de transformaciones de gráficos mostrando
también la forma en que se puede utilizar la matriz de rotación para llevar a cabo la
transformación grafica de los cuadriláteros de la estrella.
DoStar.aspx.cs
private void btnGenerar_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
Response.Write("<img border='0'
src='ServerDoStarPath.aspx?valueH=" + recHeight +
"&valueW=" + recWidth + "'>");
Response.Write("<p><font color=red>Making an Image with <I>Path
and Transform</I>!</font></p>");
}
ServerDoStarPath.aspx
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerDoStarPath : System.Web.UI.Page
{
int w1,h1;
Color bgColor=Color.BlanchedAlmond;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
178
Textos Universitarios / Serie Docencia
________________________________________________________________________
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
int cx=w1;
int cy=h1;
double L=500.0f;
double M=184.0f;
double ang = 54.0f*Math.PI/180.0f;
float cosang =(float)Math.Cos(ang);
float sinang =(float)Math.Sin(ang);
float Msinang = (float)M*sinang;
float Mcosang = (float)M*cosang;
float fScale = Math.Min(cx,cy)/1200f;
float Mf=(float)M;
float Lf =(float)L;
g.TranslateTransform(cx/2,cy/2);
g.ScaleTransform(fScale,fScale);
GraphicsPath path = new GraphicsPath();
path.AddLine(0.0f,0.0f,-Mcosang, -Msinang);
path.AddLine(-Mcosang, -Msinang,0.0f,-Lf);
path.AddLine(0.0f,-Lf,Mcosang,-Msinang);
path.AddLine(Mcosang,-Msinang,0.0f,0.0f);
//---------------[using Matrix]-------------------\\
Matrix m = new Matrix(); //This is the Diagonal
m.Rotate(72);
for(int i=0; i < 5; i++)
{
g.FillPath(Brushes.Yellow,path);
g.DrawPath(Pens.Black,path);
path.Transform(m);
}
//---------------[/using Matrix]-------------------\\
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
179
Jenaro C. Paz
________________________________________________________________________
Figura 4.13. Dibujo de cuadriláteros y Rotaciones
Para generar la estrella
4.4
Transformaciones de gráficos donde intervienen Pinceles
Las clases TextureBrush, LinearGradientBrush y PathGradientBrush representadas en la
Tabla siguiente por X_Brush contienen como ya vimos los siguientes métodos de
transformación que aunque no se utilizan muy a menudo pueden servir para algún fin
práctico
MultiplyTransform
ResetTransform
RotateTransform
ScaleTransform
180
Sobrecargado. Multiplica el objeto Matrix
que representa la transformación geométrica
local de este objeto X_Brush por el objeto
Matrix especificado, en el orden indicado
Restablece la propiedad Transform de este
objeto X_Brush en identidad.
Sobrecargado. Aplica la rotación
especificada a la matriz de transformación
de este objeto X_Brush.
Sobrecargado. Cambia el tamaño de la
transformación geométrica local de este
objeto X_Brush en la cantidad especificada.
Este método antepone la matriz de escala a
la transformación.
Textos Universitarios / Serie Docencia
________________________________________________________________________
TranslateTransform
Sobrecargado. Desplaza la transformación
geométrica local de este objeto X_Brush en
las dimensiones y en el orden especificados.
En las siguientes secciones presentamos algunas aplicaciones donde se utilizan
transformaciones al objeto Graphics así como a los diferentes pinceles con que se dibuja.
4.4.1 Transformaciones para TextureBrush
TextureBTrans.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerTextureBTrans.aspx?valueH=" + recHeight +
"&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerTextureBTrans.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerTextureBTrans : System.Web.UI.Page
{
int w1,h1;
181
Jenaro C. Paz
________________________________________________________________________
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
// Create a TextureBrush object
TextureBrush txtrBrush = new TextureBrush(
new Bitmap(Server.MapPath("flowers3.png")));
// Rotate the texture image by 90 degrees
txtrBrush.RotateTransform(90,
MatrixOrder.Prepend);
// Scale operation
txtrBrush.ScaleTransform(2, 1,
MatrixOrder.Prepend);
// Fill a rectangle with texture brush
g.TranslateTransform(180,0,MatrixOrder.Append);
g.FillRectangle(txtrBrush, 0, 0, 192, 332);
// Reset transformation
txtrBrush.ResetTransform();
// Fill rectangle after resetting transformation
//
g.ResetTransform();
g.FillRectangle(txtrBrush, 0, 0, 166, 192);
txtrBrush.ResetTransform();
txtrBrush.RotateTransform(180,
MatrixOrder.Prepend);
g.TranslateTransform(0,192,MatrixOrder.Append);
g.FillRectangle(txtrBrush, 0, 0, 166, 192);
// Dispose of objects
txtrBrush.Dispose();
g.Dispose();
// +++++++++++++++Ends section related with this Server
182
Textos Universitarios / Serie Docencia
________________________________________________________________________
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.14. Transformaciones para TextureBrush
4.4.2 Transformaciones para LinearGradientBrush
LinearGradBTrans.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerLinearGradTrans.aspx?valueH=" + recHeight +
183
Jenaro C. Paz
________________________________________________________________________
"&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerLinearGradTrans.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerLinearGradBTrans : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
184
Textos Universitarios / Serie Docencia
________________________________________________________________________
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
// Create a LinearGradientBrush object
Rectangle rect = new Rectangle(0, 0, 100, 100);
LinearGradientBrush lgBrush =
new LinearGradientBrush(
rect, Color.Red, Color.Orange,0.0f,true);
Matrix M = new Matrix(.7071f,.7071f,.7071f,.7071f,0.0f,0.0f);
// Multiply transformation
lgBrush.MultiplyTransform(M, MatrixOrder.Prepend);
// Draw a rectangle after transformation
g.FillRectangle(lgBrush, 0,0,200,200);
// Reset transformation
lgBrush.ResetTransform();
// Draw a rectangle after reset transformation
g.FillRectangle(lgBrush, 200, 0, 200, 200);
//Draw a white line to separate
g.DrawLine(Pens.White,new Point(200,0),new Point(200,200));
// Dispose of objects
lgBrush.Dispose();
g.Dispose();
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
185
Jenaro C. Paz
________________________________________________________________________
Figura 4.15. Transformaciones para LinearGradientBrush
Enseguida se muestra el código de una aplicación donde las transformaciones solo se
llevan a cabo con los métodos de la clase Graphics
LinearGradBrushes.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerLGBrushes.aspx?valueH=" + recHeight +
"&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerLGBrushes.aspx.cs
using
using
using
using
using
using
using
using
186
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
Textos Universitarios / Serie Docencia
________________________________________________________________________
using
using
using
using
using
using
using
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerLGBrushes : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
Rectangle rect = new Rectangle(0,0,150,100);
LinearGradientBrush lbrush = new LinearGradientBrush(rect,
Color.Wheat, Color.Orange,
LinearGradientMode.ForwardDiagonal);
g.RotateTransform(-60);
g.ScaleTransform(1,2);
g.TranslateTransform(-140,100);
g.FillRectangle(lbrush,rect);
g.ResetTransform();
g.FillRectangle(lbrush,rect);
187
Jenaro C. Paz
________________________________________________________________________
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.16. Transformaciones para el objeto Graphics
asociado con LinearGradientBrush
4.4.3 Transformaciones para PathGradientBrush
PathGradientBrushes.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPathGradientBrushes.aspx?valueH=" +
recHeight + "&valueW=" + recWidth +
188
Textos Universitarios / Serie Docencia
________________________________________________________________________
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerPathGradientBrushes.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerPathGradientBrushes : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
189
Jenaro C. Paz
________________________________________________________________________
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor),
// +++++++++++++++Begins section related
/*
GraphicsPath path = new GraphicsPath(new
new Point(140, 30),
new Point(235, 70),
new Point(105, 95),
new Point(170, 200),
new Point(50, 220),
new Point(20, 50),
}, new byte[] {
(byte)PathPointType.Start,
(byte)PathPointType.Bezier,
(byte)PathPointType.Bezier,
(byte)PathPointType.Bezier,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
});
*/
// Segundo ejemplo
GraphicsPath path = new GraphicsPath(new
new Point(195, 30),
new Point(217, 99),
new Point(290, 99),
new Point(231, 142),
new Point(253, 210),
new Point(195, 168),
new Point(137, 210),
new Point(159, 142),
new Point(100, 99),
new Point(173, 99),
new Point(195, 30)
}, new byte[] {
(byte)PathPointType.Start,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line,
(byte)PathPointType.Line
});
bgRect);
with this Server
Point[] {
Point[] {
PathGradientBrush pgbrush = new PathGradientBrush(path);
pgbrush.CenterColor = Color.FromArgb(255, 255, 0, 0);
Color[] colors = {Color.FromArgb(255, 255, 155, 0)};
pgbrush.SurroundColors= colors;
g.TranslateTransform(195.0F,115.31034482758620689655172413793F);
g.RotateTransform(36);
g.TranslateTransform(40,40);
g.ScaleTransform(0.5F,0.5F);
g.FillPath(pgbrush, path);
190
Textos Universitarios / Serie Docencia
________________________________________________________________________
g.ResetTransform();
g.FillPath(pgbrush, path);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
Figura 4.17. Transformaciones del objeto Graphics
asociado con PathGradientBrush
PathGradBTrans.aspx.cs
private void
{
string
string
string
btnBuild_Click(object sender, System.EventArgs e)
recHeight = txtHeight.Text;
recWidth = txtWidth.Text;
theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerPathGradBTrans.aspx?valueH=" + recHeight +
"&valueW=" + recWidth +
191
Jenaro C. Paz
________________________________________________________________________
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerPathGradBTrans.aspx
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerPathGradBTrans : System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
192
Textos Universitarios / Serie Docencia
________________________________________________________________________
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
GraphicsPath path = new GraphicsPath();
// Create a rectangle and add it to path
Rectangle rect = new Rectangle(20, 20, 100, 100);
path.AddRectangle(rect);
// Create a path gradient brush
PathGradientBrush pgBrush =
new PathGradientBrush(path.PathPoints);
// Set its center and surrounding colors
pgBrush.CenterColor = Color.Yellow;
pgBrush.SurroundColors = new Color[] {Color.Red};
g.FillRectangle(pgBrush, 20, 20, 400, 400);
pgBrush.CenterColor = Color.Green;
pgBrush.SurroundColors = new Color[] {Color.Blue};
// Create matrix
Matrix M = new Matrix();
// Translate
M.Translate(150.0f, 70.0f, MatrixOrder.Prepend);
// Rotate
M.Rotate(20.0f, MatrixOrder.Prepend);
// Scale
M.Scale(1f, 2.0f, MatrixOrder.Prepend);
// Shear
M.Shear(.5f, 0.1f, MatrixOrder.Prepend);
// Apply matrix to the brush
pgBrush.MultiplyTransform(M);
// Use brush after transformation
// to fill a rectangle
g.FillRectangle(pgBrush, 20, 20, 400, 400);
// Dispose of objects
pgBrush.Dispose();
g.Dispose();
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
193
Jenaro C. Paz
________________________________________________________________________
Figura 4.18. Transformaciones del objeto PathGradientBrush
4.5
Plumas y pinceles del Sistema
Las plumas y pinceles del sistema, se usan para dibujar y pintar usando colores del
sistema. La forma en que plumas y pinceles pueden crearse es usando la clase
SystemColors.
4.5.1 Colores del Sistema
SystemColors representa en GDI+ a los colores del sistema, proveyendo las propiedades
publicas para que usted pueda hacerlo. La manera para crear plumas de la clase
SystemPens y pinceles de la clase SystemBrushes la veremos mas adelante, después de
presentar a esta clase.
194
Textos Universitarios / Serie Docencia
________________________________________________________________________
4.5.1.1 Clase SystemColors23
Requisitos
Espacio de nombres: System.Drawing
4.5.1.1.1 Propiedades públicas
ActiveBorder
ActiveCaption
ActiveCaptionText
AppWorkspace
Control
ControlDark
ControlDarkDark
ControlLight
ControlLightLight
ControlText
Obtiene una estructura Color que es el color
del borde de la ventana activa.
Obtiene una estructura Color que es el color
del fondo de la barra de título de la ventana
activa.
Obtiene una estructura Color que es el color
del texto de la barra de título de la ventana
activa.
Obtiene una estructura Color que es el color
del área de trabajo de la aplicación. El área
de trabajo de la aplicación es el área en una
vista de varios documentos que no ocupan
dichos documentos.
Obtiene una estructura Color que es el color
de la superficie de un elemento 3D.
Obtiene una estructura Color que es el color
de la sombra de un elemento 3D. El color de
la sombra se aplica a las partes de los
elementos en tres dimensiones que se
encuentran en la zona alejada de la fuente de
luz.
Obtiene una estructura Color que es el color
de la sombra oscura de un elemento 3D. El
color de la sombra oscura se aplica a las
partes de los elementos 3D que tienen el
color más oscuro.
Obtiene una estructura Color que es el color
claro de un elemento 3D. El color claro se
aplica a las partes de los elementos 3D
expuestos a la fuente de luz.
Obtiene una estructura Color que es el color
resaltado de un elemento 3D. El color
resaltado se aplica a las partes de los
elementos 3D que tienen el color más claro.
Obtiene una estructura Color que es el color
23
http://msdn2.microsoft.com/en-us/library/system.drawing.systemcolors(VS.80).aspx
Junio 3 de 2006
195
Jenaro C. Paz
________________________________________________________________________
Desktop
GrayText
Highlight
HighlightText
HotTrack
InactiveBorder
InactiveCaption
InactiveCaptionText
Info
InfoText
Menu
MenuText
196
del texto de un elemento 3D.
Obtiene una estructura Color que es el color
del escritorio.
Obtiene una estructura Color que es el color
del texto atenuado. Los elementos de una
lista que no están habilitados se muestran en
texto atenuado.
Obtiene una estructura Color que es el color
del fondo de los elementos seleccionados.
Incluye elementos de menú seleccionados
además del texto seleccionado. Por ejemplo,
la estructura Color puede ser el color
utilizado para el fondo de los elementos
seleccionados de un cuadro de lista.
Obtiene una estructura Color que es el color
del texto de los elementos seleccionados.
Por ejemplo, la estructura Color puede ser el
color utilizado para el texto de los
elementos seleccionados de un cuadro de
lista.
Obtiene una estructura Color que es el color
utilizado para determinar un elemento del
que se hace un seguimiento completo. Si se
hace un sólo clic en un elemento del que se
hace un seguimiento completo, el elemento
se ejecuta.
Obtiene una estructura Color que es el color
del borde de una ventana inactiva.
Obtiene una estructura Color que es el color
del fondo de la barra de título de una
ventana inactiva.
Obtiene una estructura Color que es el color
del texto de la barra de título de una ventana
inactiva.
Obtiene una estructura Color que es el color
del fondo de una información sobre
herramientas.
Obtiene una estructura Color que es el color
del texto de una información sobre
herramientas.
Obtiene una estructura Color que es el color
del fondo de un menú.
Obtiene una estructura Color que es el color
del texto de un menú.
Textos Universitarios / Serie Docencia
________________________________________________________________________
ScrollBar
Window
WindowFrame
WindowText
Obtiene una estructura Color que es el color
del fondo de una barra de desplazamiento.
Obtiene una estructura Color que es el color
del fondo del área de cliente de una ventana.
Obtiene una estructura Color que es el color
del marco de una ventana.
Obtiene una estructura Color que es el color
del texto del área de cliente de una ventana.
4.5.2 Plumas del Sistema
Cada una de las propiedades de la clase SystemPens es un objeto Pen que es del color de
un elemento de presentación de Windows y es de un ancho de 1 pixel.
4.5.2.1 Clase SystemPens24
Requisitos
24
http://msdn2.microsoft.com/en-us/library/system.drawing.systempens(VS.80).aspx
Junio 3 de 2006
197
Jenaro C. Paz
________________________________________________________________________
Espacio de nombres: System.Drawing
4.5.2.2 Propiedades públicas
ActiveCaptionText
Control
ControlDark
ControlDarkDark
ControlLight
ControlLightLight
ControlText
GrayText
Highlight
HighlightText
198
Obtiene un objeto Pen que es el color del
texto de la barra de título de la ventana
activa.
Obtiene un objeto Pen que es el color de
superficie de un elemento 3D.
Obtiene un objeto Pen que es el color de la
sombra de un elemento 3D. El color de la
sombra se aplica a las partes de los
elementos en tres dimensiones que se
encuentran en la zona alejada de la fuente de
luz.
Obtiene un objeto Pen que es el color de la
sombra oscura de un elemento 3D. El color
de la sombra oscura se aplica a las partes de
los elementos 3D que tienen el color más
oscuro.
Obtiene un objeto Pen que es el color claro
de un elemento 3D. El color claro se aplica
a las partes de los elementos 3D expuestos a
la fuente de luz.
Obtiene un objeto Pen que es el color
resaltado de un elemento 3D. El color
resaltado se aplica a las partes de los
elementos 3D que tienen el color más claro.
Obtiene un objeto Pen que es el color del
texto de un elemento 3D.
Obtiene un objeto Pen que es el color del
texto atenuado. Los elementos de una lista
que no están habilitados se muestran en
texto atenuado.
Obtiene un objeto Pen que es el color del
fondo de los elementos seleccionados.
Incluye elementos de menú seleccionados
además del texto seleccionado. Por ejemplo,
el lápiz puede ser del color utilizado para el
fondo de los elementos seleccionados de un
cuadro de lista.
Obtiene un objeto Pen que es el color del
Textos Universitarios / Serie Docencia
________________________________________________________________________
InactiveCaptionText
InfoText
MenuText
WindowFrame
WindowText
texto de los elementos seleccionados.
Incluye elementos de menú seleccionados
además del texto seleccionado. Por ejemplo,
el lápiz puede ser del color utilizado para el
texto de los elementos seleccionados de un
cuadro de lista.
Obtiene un objeto Pen que es el color del
texto de la barra de título de una ventana
inactiva.
Obtiene un objeto Pen que es el color del
texto de una información sobre
herramientas.
Obtiene un objeto Pen que es el color del
texto de un menú.
Obtiene un objeto Pen que es el color del
marco de una ventana.
Obtiene un objeto Pen que es el color del
texto del área de cliente de una ventana.
La manera de crear una pluma utilizando la clase SystemPens se proporciona en el
siguiente segmento de código
C#
Pen myPen = SystemPens.FromSystemColor(SystemColors.GrayText);
4.5.3 Pinceles del Sistema
Cada una de las propiedades de la clase SystemBrushes es un objeto SolidBrush que es el
color de un elemento de presentación de Windows.
4.5.3.1 Clase SystemBrushes25
Requisitos
Espacio de nombres: System.Drawing
4.5.3.1.1 Propiedades públicas
ActiveBorder
ActiveCaption
Obtiene un objeto SolidBrush que es el
color del borde de la ventana activa.
Obtiene un objeto SolidBrush que es el
25
http://msdn2.microsoft.com/en-us/library/system.drawing.systembrushes(VS.80).aspx
Junio 3 de 2006
199
Jenaro C. Paz
________________________________________________________________________
ActiveCaptionText
AppWorkspace
Control
ControlDark
ControlDarkDark
ControlLight
ControlLightLight
ControlText
Desktop
Highlight
200
color del fondo de la barra de título de la
ventana activa.
Obtiene un objeto SolidBrush que es el
color del texto de la barra de título de la
ventana activa.
Obtiene un objeto SolidBrush que es el
color del área de trabajo de la aplicación. El
área de trabajo de la aplicación es el área en
una vista de varios documentos que no
ocupan dichos documentos.
Obtiene un objeto SolidBrush que es el
color de la superficie de un elemento en tres
dimensiones.
Obtiene un objeto SolidBrush que es el
color de la sombra de un elemento en tres
dimensiones. El color de la sombra se aplica
a las partes de los elementos en tres
dimensiones que se encuentran en la zona
alejada de la fuente de luz.
Obtiene un objeto SolidBrush que es el
color de la sombra oscura de un elemento
3D. El color de la sombra oscura se aplica a
las partes de los elementos 3D que tienen el
color más oscuro.
Obtiene un objeto SolidBrush que es el
color claro de un elemento 3D. El color
claro se aplica a las partes de los elementos
3D expuestos a la fuente de luz.
Obtiene un objeto SolidBrush que es el
color resaltado de un elemento en tres
dimensiones. El color resaltado se aplica a
las partes de los elementos 3D que tienen el
color más claro.
Obtiene un objeto SolidBrush que es el
color del texto de un elemento 3D.
Obtiene un objeto SolidBrush que es el
color del escritorio.
Obtiene un objeto SolidBrush que es el
color del fondo de los elementos
seleccionados. Incluye elementos de menú
seleccionados además del texto
seleccionado. Por ejemplo, el pincel puede
ser del color utilizado para el fondo de los
elementos seleccionados de un cuadro de
Textos Universitarios / Serie Docencia
________________________________________________________________________
HighlightText
HotTrack
InactiveBorder
InactiveCaption
Info
Menu
ScrollBar
Window
WindowText
lista.
Obtiene un objeto SolidBrush que es el
color del texto de los elementos
seleccionados. Incluye elementos de menú
seleccionados además del texto
seleccionado. Por ejemplo, el pincel puede
ser del color utilizado para el texto de los
elementos seleccionados de un cuadro de
lista.
Obtiene un objeto SolidBrush que es el
color utilizado para determinar un elemento
del que se hace un seguimiento completo. Si
se hace un sólo clic en un elemento del que
se hace un seguimiento completo, el
elemento se ejecuta.
Obtiene un objeto SolidBrush que es el
color del borde de una ventana inactiva.
Obtiene un objeto SolidBrush que es el
color del fondo de la barra de título de una
ventana inactiva.
Obtiene un objeto SolidBrush que es el
color del fondo de una información sobre
herramientas.
Obtiene un objeto SolidBrush que es el
color del fondo de un menú.
Obtiene un objeto SolidBrush que es el
color del fondo de una barra de
desplazamiento.
Obtiene un objeto SolidBrush que es el
color del fondo del área de cliente de una
ventana.
Obtiene un objeto SolidBrush que es el
color del texto del área de cliente de una
ventana.
C#
SolidBrush myBrush = (SolidBrush)
SystemBrushes.FromSystemColor(SystemColors.InactiveCaption);
SystemPenPencil.aspx.cs
private void btnBuild_Click(object sender, System.EventArgs e)
{
201
Jenaro C. Paz
________________________________________________________________________
string recHeight = txtHeight.Text;
string recWidth = txtWidth.Text;
string theColor = ColorList.SelectedItem.Text ;
Response.Write("<img border='0'
src='ServerSystemPenPencil.aspx?valueH=" + recHeight +
"&valueW=" + recWidth +
"&valueC=" + theColor + "'>"+ "</p>");
}
ServerSystemPenPencil.aspx.cs
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
System.IO;
System.Drawing.Imaging;
System.Drawing.Drawing2D;
System.Drawing.Text;
System.Globalization ;
namespace
{
///
///
///
JCPGraphics
<summary>
Summary description for rectServer.
</summary>
public class ServerSystemPenPencil: System.Web.UI.Page
{
int w1,h1;
Color bgColor;
private void Page_Load(object sender, System.EventArgs e)
{
w1 = UInt16.Parse(Request.QueryString["valueW"]);
h1 = UInt16.Parse(Request.QueryString["valueH"]);
bgColor=Color.FromName(Request.QueryString["valueC"]);
// Create a Stream in memory to save the image
MemoryStream memStream
= canvasAndImage();
Response.Clear();
// Send the memory image to Browser in binary mode
202
Textos Universitarios / Serie Docencia
________________________________________________________________________
memStream.WriteTo(Response.OutputStream);
}
public MemoryStream canvasAndImage()
{
// Define a Rectangle to be the BG rectangle
Rectangle bgRect = new Rectangle(0,0,w1,h1);
// The bitmap Object used to work with images defined by
// pixel data
Bitmap pixelImage = new Bitmap(w1,h1);
// 1) Will be used to build the new Graphics object
// 2) Whatever you do with the Graphics object you afect
// the image object!
Graphics g = Graphics.FromImage(pixelImage);
// Fill the interior of the bg rectangle
g.FillRectangle(new SolidBrush(bgColor), bgRect);
// +++++++++++++++Begins section related with this Server
//
// Create a pen using SystemPens
Pen pn = SystemPens.FromSystemColor(SystemColors.GrayText);
// Create a brush using SystemBrushes
SolidBrush brush =
(SolidBrush)SystemBrushes.FromSystemColor
(SystemColors.InactiveCaption);
// Draw lines and rectangles
g.DrawLine(pn, 20, 20, 20, 100);
g.DrawLine(pn, 20, 20, 100, 20);
g.DrawLine(pn,20,100,100,100);
g.DrawLine(pn,100,20,100,100);
g.FillRectangle(brush, 30, 30, 60, 60);
// +++++++++++++++Ends section related with this Server
MemoryStream aStream = new MemoryStream();
pixelImage.Save(aStream,ImageFormat.Png);
// Bmp, Jpeg, Png, Gif
return aStream;
}
Web Form Designer generated code
}
}
203
Jenaro C. Paz
________________________________________________________________________
Figura 4.19. Trabajando con plumas y pinceles del Sistema
204

Documentos relacionados