GDI+: interfaz de dispositivo gráfico de próxima generación
Todas las aplicaciones de interfaz gráfica de usuario (GUI) interactúan con dispositivos de hardware (monitores, impresoras, escáneres), que pueden representarse como datos legibles. Sin embargo, la aplicación no se comunica directamente con el dispositivo; de lo contrario, se debe escribir un código de interfaz de usuario diferente para cada dispositivo. Para evitar esta duplicación de trabajo, podemos utilizar un tercer componente entre la aplicación y el dispositivo. Este componente convertirá y transferirá los datos enviados al dispositivo y los datos enviados por el dispositivo al programa. Y este componente es GDI+. GDI+ es la entrada para interactuar con dispositivos gráficos en .NET Framework. GDI+ es un conjunto de clases de C++ ubicadas en una biblioteca de clases llamada Gdiplus.dll. Gdiplus.dll es un componente integrado en los sistemas operativos Windows XP y Windows Server 2003. Bien, no perderé mucho tiempo hablando de temas académicos aquí. Usemos GDI+ para hacer un dibujo en Web Form.
Debes haber visto imágenes como esta. Por supuesto, esta imagen no es estándar. El código está publicado aquí. Si estás interesado, ¡puedes probarlo!
espacio de nombres Sky_MsdnDataGrid
{
usando Sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Drawing.Imaging;
usando System.Web;
usando System.Web.SessionState;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
/// <resumen>
/// Descripción resumida de AspxChart.
/// </summary>
clase pública AspxChart: System.Web.UI.Page
{
mapa de bits de mapa de bits privado;
gráficos gráficos privados;
privado int[] arrValues;
cadena privada [] arrValueNames;
Page_Load vacío privado (remitente del objeto, System.EventArgs e)
{
arrValues = nuevo int[6];
arrValueNames = nueva cadena [6];
valoresarr[0] = 100;
arrValues[1] = 135;
valoresarr[2] = 115;
valoresarr[3] = 125;
valoresarr[4] = 75;
valoresarr[5] = 120;
arrValueNames[0] = "Enero";
arrValueNames[1] = "febrero";
arrValueNames[2] = "Marzo";
arrValueNames[3] = "Abril";
arrValueNames[4] = "mayo";
arrValueNames[5] = "junio";
this.Init_Bitmap();
this.Draw_Rectangle();
this.Draw_Pie();
//Guarda la imagen dibujada en formato Gif en el flujo de salida de la respuesta de la página actual
mapa de bits.Guardar(this.Response.OutputStream,ImageFormat.Gif);
}
/// <resumen>
/// Realizar acciones iniciales en el mapa de bits que se va a dibujar (se puede imaginar como un lienzo)
/// </summary>
vacío privado Init_Bitmap()
{
mapa de bits = nuevo mapa de bits(400,200);
gráficos = Graphics.FromImage(mapa de bits);
gráficos.Claro(Color.Blanco);
gráficos.DrawString("Ventas de la empresa
}
#region Código generado por herramientas de diseño de formularios web
anular el vacío protegido OnInit (EventArgs e)
{
//
// CODEGEN: Esta es una llamada requerida por la herramienta de diseño de formularios web ASP.NET.
//
InicializarComponente();
base.OnInit(e);
}
/// <resumen>
/// Este método es necesario para la compatibilidad con herramientas de diseño; no utilice un editor de código para modificarlo
/// El contenido de este método.
/// </summary>
vacío privado InicializarComponente()
{
this.Load += nuevo System.EventHandler(this.Page_Load);
}
#regiónfinal
/// <resumen>
/// Dibuja un rectángulo en el lienzo.
/// </summary>
vacío privado Draw_Rectangle()
{
ent i;
PuntoF símboloLeg = nuevo PuntoF(335,20);
PuntoF descLeg = nuevo PuntoF(360,16);
para (i = 0; i < arrValueNames.Length; i++)
{
gráficos.FillRectangle(nuevo SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
gráficos.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);
gráficos.DrawString(arrValueNames[i].ToString(),new Font("Nuevo cuerpo detallado",8),Brushes.Black,descLeg);
símboloLeg.Y += 15;
descLeg.Y += 16;
}
para (i = 0; i < arrValues.Length; i++)
{
gráficos.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
gráficos.DrawRectangle(Pens.Black,(i*35) + 15,200 - arrValues[i],20,arrValues[i]);
}
}
/// <resumen>
/// Dibuja una forma de pastel en el lienzo.
/// </summary>
vacío privado Draw_Pie()
{
ent i;
// currentangle representa el ángulo actual totalangle representa el ángulo máximo totalvalues representa las ventas máximas
float sglCurrentAngle = 0, sglTotalAngle = 0, sglTotalValues = 0;
// Calcular ventas máximas
para (i = 0; i < arrValues.Length; i++)
sglTotalValues += arrValues[i];
para (i = 0; i < arrValues.Length; i++)
{
// Valor de ángulo del mes actual: ventas del mes actual / ventas máximas * 360
sglCurrentAngle = arrValues[i] / sglTotalValues * 360;
gráficos.FillPie(nuevo SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
gráficos.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
Función auxiliar #region
Color privado GetColor (int itemIndex)
{
Color de color;
cambiar (índice de artículo)
{
caso 0:
color = Color.Azul;
romper;
caso 1:
color = Color.Rojo;
romper;
caso 2:
color = Color.Amarillo;
romper;
caso 3:
color = Color.Púrpura;
romper;
caso 4:
color = Color.Naranja;
romper;
caso 5:
color = Color.Marrón;
romper;
por defecto:
color = Color.Azul;
romper;
}
color de retorno;
}
#regiónfinal
}
}