从网上找到一段随机图片的代码,因为要适应系统的背景,所以要改动图片的背景设置, g.Clear(Color.AliceBlue);
clear()这个方法的参数是Color类的一个枚举值,而且都是E文的,不能一个一个修改去试,所以写了段代码来查看
Color类枚举颜色。
下面的是经过我修改的生成随机图片的函数.
/// <summary>
/// 该方法用于根据生成的随机数生成图片
/// </summary>
/// <param name="VNum">参数是生成图片的内容</param>
/// <param name="VColor">参数是生成图片的背景色</param>
private void ValidateCode(string num,Color color)
{
Bitmap Img = null;
Graphics g = null;
MemoryStream ms = null;
int gheight = num.Length * 12;//定义图像的大小
Img = new Bitmap(gheight, 24);//生成图像的实例
g = Graphics.FromImage(Img);//从Img对象生成新的Graphics对象
g.Clear(color);
Font f = new Font("Arial Black", 10);//生成Font类的实例
SolidBrush s = new SolidBrush(Color.White);//生成笔刷类的实例
g.DrawString(num, f, s, 3, 3);//将VNum写入图片中
ms = new MemoryStream();//生成内存流对象
Img.Save(ms, ImageFormat.Jpeg);//将此图像以Jpeg图像文件的格式保存到流中
Response.ClearContent();//更改http ContentType
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());//将整个二进制流的内容写入字节数组
//回收资源
s.Dispose();
g.Dispose();
Img.Dispose();
f.Dispose();
Response.End();
ms.Close();
}
/// <summary>
/// 该方法用于生成指定位数的随机数
/// </summary>
/// <param name="VcodeNum">参数是随机数的位数</param>
/// <returns>返回一个随机数字符串</returns>
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" +
",q,r,s,t,u,v,w,x,y,z";
string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分成数组
StringBuilder VNum = new StringBuilder();
int temp = -1;//记录上次随机数值,尽量避避免生产几个一样的随机数
Random rand = new Random();
//采用一个简单的算法以保证生成随机数的不同
for (int i = 0; i < VcodeNum ; i++)
{
if (temp != -1)
{
int j = i + 1;
rand = new Random( j * temp * unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(35);
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum.Append(VcArray[t]);
}
return VNum.ToString();
}
下面的是经过修改的查看Color类的枚举值的方法
div>
<table style="width: 176px">
<tr>
<td style="width: 83px">
<asp:DropDownList ID="ddlMulti" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlMulti_SelectedIndexChanged"
Style="position: relative">
</asp:DropDownList></td>
<td>
<asp:Image ID="Image1" runat="server" />
</td>
</tr>
</table>
</div>
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
populateDdlMultiColor();
colorManipulation();
}
}
private void populateDdlMultiColor()
{
ddlMulti.DataSource = finalColorList();
ddlMulti.DataBind();
}
private List<string> finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] systemEnvironmentColors = new string[(typeof(System.Drawing.Color)).GetProperties().Length];
int index = 0;
foreach (MemberInfo member in (typeof(System.Drawing.Color)).GetProperties())
{
systemEnvironmentColors[index ++] = member.Name;
}
List<string> finalColorList = new List<string>();
foreach (string color in allColors)
{
if (Array.IndexOf(systemEnvironmentColors, color) > 0)
{
finalColorList.Add(color);
}
}
return finalColorList;
}
private void colorManipulation()
{
int row;
for (row = 0; row < ddlMulti.Items.Count - 1; row++)
{
ddlMulti.Items[row].Attributes.Add("style","background-color:" + ddlMulti.Items[row].Value);
}
ddlMulti.BackColor = Color.FromName(ddlMulti.SelectedItem.Text);
}
protected void ddlMulti_SelectedIndexChanged(object sender, EventArgs e)
{
ddlMulti.BackColor = Color.FromName(ddlMulti.SelectedItem.Text);
colorManipulation();
ddlMulti.Items.FindByValue(ddlMulti.SelectedValue).Selected = true;
Image1.ImageUrl = "~/Code.aspx?Color=" + ddlMulti.SelectedItem.Value;
}
哈哈 好用了 试下吧