ASP.NET动态生成进度条图片

来源:互联网  作者:未知
摘要:using System;using System.Drawing;using System.Drawing.Drawing2D; /// summary/// this class for build Some pictures for ……

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
/// <summary>
/// this class for build Some pictures for web-ui
/// </summary>
public class UIMaps
{

public UIMaps()

{

}

/// <summary>

/// Build a progress width this value in UIProgressProperty structure

/// </summary>

/// <param name="uiprspty">Property</param>

/// <returns>a bitmap</returns>

public Bitmap BuildDefault(UIProgressProperty uiprspty)

{
      if (uiprspty.Width <= 5 || uiprspty.Height <= 3)
          return null;
      #region Init
      //Measure Value
      int rValueWidth = 0;
      if (uiprspty.Value <= 0)
      {
          rValueWidth = 0;
          uiprspty.Value = 0;
      }
      else if (uiprspty.Value > uiprspty.maxValue)
      {
          rValueWidth = uiprspty.Width;
          uiprspty.Value = uiprspty.maxValue;
      }
      else
          rValueWidth = (int)((float)((float)uiprspty.Value / (float)uiprspty.maxValue) * uiprspty.Width); //real length of data
      //Caption
      uiprspty.Text += Convert.ToString((int)(((float)uiprspty.Value / (float)uiprspty.maxValue) * 100)) + "%"; //%20

Bitmap map = new Bitmap(uiprspty.Width, uiprspty.Height);
      Graphics g = Graphics.FromImage(map);
      g.InterpolationMode = InterpolationMode.HighQualityBilinear;

//background
      g.FillRectangle(new SolidBrush(uiprspty.backColor),
          new Rectangle(0, 0, uiprspty.Width, uiprspty.Height));
      #endregion

#region datas
      //datas
      //g.FillRectangle(new SolidBrush(uiprspty.fColor1),
      //  new Rectangle(0, 1, rValueWidth, uiprspty.Height - 2));

Rectangle topleftrc = new Rectangle(1, 1, rValueWidth / 2, uiprspty.Height / 2);
      if (topleftrc.Width <= 0) topleftrc.Width = 1;
      LinearGradientBrush topleft = new LinearGradientBrush(topleftrc,
          uiprspty.fColor1, uiprspty.fColor2,
          LinearGradientMode.ForwardDiagonal);

Rectangle toprgtrc = new Rectangle((rValueWidth / 2) + 1, 1, rValueWidth / 2, uiprspty.Height / 2);
      if (toprgtrc.Width <= 0) toprgtrc.Width = 1;
      LinearGradientBrush toprgt = new LinearGradientBrush(toprgtrc,
          uiprspty.fColor1, uiprspty.fColor2,
          LinearGradientMode.BackwardDiagonal);

Rectangle btmleftrc = new Rectangle(1, (uiprspty.Height / 2) - 1, rValueWidth / 2, uiprspty.Height / 2);
      if (btmleftrc.Width <= 0) btmleftrc.Width = 1;
      LinearGradientBrush btmleft = new LinearGradientBrush(btmleftrc,
          uiprspty.fColor2, uiprspty.fColor1, LinearGradientMode.BackwardDiagonal);

Rectangle btmrgtrc = new Rectangle((rValueWidth / 2) + 1, (uiprspty.Height / 2) - 1, rValueWidth / 2, uiprspty.Height / 2);
      if (btmrgtrc.Width <= 0) btmrgtrc.Width = 1;
      LinearGradientBrush btmrgt = new LinearGradientBrush(btmrgtrc,
          uiprspty.fColor2, uiprspty.fColor1, LinearGradientMode.ForwardDiagonal);

g.FillRectangle(topleft, topleftrc);
      g.FillRectangle(toprgt, toprgtrc);
      g.FillRectangle(btmleft, btmleftrc);
      g.FillRectangle(btmrgt, btmrgtrc);

topleft.Dispose();
      toprgt.Dispose();
      btmleft.Dispose();
      btmrgt.Dispose();
      #endregion

#region paint text
      if (uiprspty.showText)
      {
          if (uiprspty.Text != null || uiprspty.Text.Trim() != "")
          {
              SizeF szf = g.MeasureString(uiprspty.Text, uiprspty.textFont);
              int leftp = (int)szf.Width > uiprspty.Width ? 1 : (uiprspty.Width - (int)szf.Width) / 2;
              int toppx = (int)szf.Height > uiprspty.Height ? 1 : (uiprspty.Height - (int)szf.Height) / 2;
              g.DrawString(uiprspty.Text, uiprspty.textFont,
                  new SolidBrush(uiprspty.foreColor), (float)leftp, (float)toppx);
          }
      }
      #endregion

//border
      g.DrawRectangle(new Pen(uiprspty.borderColor),
          new Rectangle(0, 0, uiprspty.Width - 1, uiprspty.Height - 1));

#region SaveMap
      //ptr disponse
      g.Dispose();
      GC.Collect();

//save?
      if (uiprspty.bSave)
      {
          try
          {
              map.Save(uiprspty.path, System.Drawing.Imaging.ImageFormat.Png);
              uiprspty.bSaved = true;
          }
          catch
          {
              uiprspty.bSaved = false;
          }
      }
      #endregion
      return map;

}
}

public struct UIProgressProperty
{

public int Width;

public int Height;

public bool showText;

public string Text;

public Font textFont;

public Color foreColor;

public Color fColor1;

public Color fColor2;

public Color borderColor;

public Color backColor;

public int Value;

public int maxValue;

public bool bSave;

public bool bSaved;

public string path;

public void SetValueAndSave(int value, int maxvalue, bool save, string savepath)

{
      Value = value;
      maxValue = maxvalue;
      bSave = save;
      path = savepath;

}

public void SetThemeOrange(int ctlWidth, int ctlHeight)

{
      Width = ctlWidth;
      Height = ctlHeight;
      showText = true;
      textFont = new Font("Arial", 9f);
      Text = "";
      foreColor = Color.OrangeRed;
      borderColor = Color.OrangeRed;
      backColor = Color.White;
      fColor1 = Color.Orange;
      fColor2 = Color.White;

}

public void SetThemeGreen(int ctlWidth, int ctlHeight)

{
      Width = ctlWidth;
      Height = ctlHeight;
      showText = true;
      textFont = new Font("Arial", 9f);
      Text = "";
      foreColor = Color.Green;
      borderColor = Color.Green;
      backColor = Color.White;
      fColor1 = Color.FromArgb(16, 217, 3);
      fColor2 = Color.White;

}

本篇文章来源于 精品文章收藏网 原文链接:http://www.boy5d.com/article/html/2007-11/9.html

【相关文章】好搜一下
如何使用Visual C# 2005或Visual C# .NET向Excel工作簿传输数据

如何使用Visual C# 2005或Vis

本文分步介绍了多种从 Microsoft Visual C# 2005 或 Mi…