GDI+ - Interface de Dispositivo Gráfico de Próxima Geração
Todos os aplicativos de interface gráfica de usuário (GUI) interagem com dispositivos de hardware (monitores, impressoras, scanners), que podem ser representados como dados legíveis. No entanto, o aplicativo não se comunica diretamente com o dispositivo, caso contrário, um código de interface de usuário diferente deverá ser escrito para cada dispositivo. Para evitar esta duplicação de trabalho, podemos utilizar um terceiro componente entre a aplicação e o dispositivo. Este componente irá converter e transferir os dados enviados para o dispositivo, e os dados enviados pelo dispositivo para o programa. E esse componente é GDI+. GDI+ é a entrada para interagir com dispositivos gráficos no .NET Framework. GDI+ é um conjunto de classes C++ localizadas em uma biblioteca de classes chamada Gdiplus.dll. Gdiplus.dll é um componente integrado nos sistemas operacionais Windows XP e Windows Server 2003. Ok, não vou perder muito tempo falando sobre assuntos acadêmicos aqui. Vamos usar o GDI+ para fazer um desenho no Web Form.
Você deve ter visto fotos como esta. Claro, esta imagem não é padrão. Se você estiver interessado, experimente!
espaço para nome Sky_MsdnDataGrid
{
usando o sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Drawing.Imaging;
usando System.Web;
usando System.Web.SessionState;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
/// <resumo>
/// Descrição resumida do AspxChart.
/// </sumário>
classe pública AspxChart: System.Web.UI.Page
{
bitmap de bitmap privado;
gráficos gráficos privados;
private int[] valoresarr;
string privada[] arrValueNames;
private void Page_Load (remetente do objeto, System.EventArgs e)
{
arrValues = new int[6];
arrValueNames = nova string[6];
arrValores[0] = 100;
arrValores[1] = 135;
arrValores[2] = 115;
arrValores[3] = 125;
arrValores[4] = 75;
arrValores[5] = 120;
arrValueNames[0] = "Janeiro";
arrValueNames[1] = "Fevereiro";
arrValueNames[2] = "Março";
arrValueNames[3] = "Abril";
arrValueNames[4] = "Maio";
arrValueNames[5] = "Junho";
this.Init_Bitmap();
this.Draw_Rectangle();
this.Draw_Pie();
//Salva a imagem desenhada em formato Gif no fluxo de saída da resposta da página atual
bitmap.Save(this.Response.OutputStream,ImageFormat.Gif);
}
/// <resumo>
/// Executa ações iniciais no bitmap a ser desenhado (pode ser imaginado como um canvas)
/// </sumário>
vazio privado Init_Bitmap()
{
bitmap = novo Bitmap(400.200);
gráficos = Graphics.FromImage(bitmap);
gráficos.Clear(Color.White);
graphics.DrawString("Vendas da Empresa
}
#region Código gerado pelas ferramentas de design de formulários da Web
substituir void protegido OnInit (EventArgs e)
{
//
// CODEGEN: Esta é uma chamada exigida pela ferramenta de design de formulários da Web ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/// <resumo>
/// Este método é necessário para suporte da ferramenta de design - não use um editor de código para modificá-lo
/// O conteúdo deste método.
/// </sumário>
privado vazio InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// <resumo>
/// Desenha um retângulo na tela
/// </sumário>
vazio privado Draw_Rectangle()
{
int eu;
Símbolo PontoFLeg = novo PontoF(335,20);
PontoF descLeg = novo PontoF(360,16);
for (i = 0; i <arrValueNames.Length; i++)
{
gráficos.FillRectangle(new SolidBrush(GetColor(i)),symbolLeg.X,symbolLeg.Y,20,10);
gráficos.DrawRectangle(Pens.Black,symbolLeg.X,symbolLeg.Y,20,10);
graphics.DrawString(arrValueNames[i].ToString(),new Font("Novo corpo detalhado",8),Brushes.Black,descLeg);
símboloLeg.Y += 15;
descLeg.Y += 16;
}
for (i = 0; i < arrValues.Length; i++)
{
gráficos.FillRectangle(new SolidBrush(GetColor(i)),(i*35) + 15.200 - arrValues[i],20,arrValues[i]);
graphics.DrawRectangle(Pens.Black,(i*35) + 15.200 - arrValues[i],20,arrValues[i]);
}
}
/// <resumo>
/// Desenha uma forma de torta na tela
/// </sumário>
vazio privado Draw_Pie()
{
int eu;
// currentangle representa o ângulo atual totalangle representa o ângulo máximo totalvalues representa o máximo de vendas
float sglCurrentAngle = 0, sglTotalAngle = 0, sglTotalValues = 0;
//Calcula vendas máximas
for (i = 0; i < arrValues.Length; i++)
sglTotalValues += arrValues[i];
for (i = 0; i < arrValues.Length; i++)
{
// Valor do ângulo do mês atual: vendas do mês atual / vendas máximas * 360
sglCurrentAngle = arrValues[i] / sglTotalValues * 360;
gráficos.FillPie(novo SolidBrush(GetColor(i)),240,95,100,100,sglTotalAngle,sglCurrentAngle);
graphics.DrawPie(Pens.Black,240,95,100,100,sglTotalAngle,sglCurrentAngle);
sglTotalAngle += sglCurrentAngle;
}
}
#region Função auxiliar
cor privada GetColor (int itemIndex)
{
Cor da cor;
switch(itemIndex)
{
caso 0:
cor = Cor.Azul;
quebrar;
caso 1:
cor = Cor.Vermelho;
quebrar;
caso 2:
cor = Cor.Amarelo;
quebrar;
caso 3:
cor = Cor.Roxo;
quebrar;
caso 4:
cor = Cor.Laranja;
quebrar;
caso 5:
cor = Cor.Marrom;
quebrar;
padrão:
cor = Cor.Azul;
quebrar;
}
retornar cor;
}
#endregion
}
}