日期:2014-05-20  浏览次数:20398 次

如何在web自定义控件内生成图片
我想做一个验证码,想做成一个web自定义控件为了方便嘛,
但是原来做的是做用用户控件,比较简单,我对自定义控件不是很熟悉
希望大家给点意见

------解决方案--------------------
可以做,但如果用图片控件做的话缓存问题要解决
------解决方案--------------------
图片的联接路径可以加一个随机参数
------解决方案--------------------
我这儿有个例子
c#部分
private void Page_Load(object sender, System.EventArgs e)
{
//RndNum是一个自定义函数
string VNum=RndNum(4); //这里的数字4代表显示的是4位的验证字符串!
Session[ "VNum "]=VNum;
Validate_Code(VNum);
}

private void Validate_Code(string VNum)
{
Bitmap Img = null;
Graphics g = null ;
MemoryStream ms = null ;

int gheight = VNum.Length*12;
Img = new Bitmap(gheight,20);
//Img.SetPixel(3,3,Color.White);
g = Graphics.FromImage(Img);
Font f = new Font( "新宋体 ",12 );
SolidBrush s = new SolidBrush( Color.Red );
g.Clear(Color.White);
g.DrawString(VNum,f,s,3,3);
ms=new MemoryStream();
Img.Save(ms,ImageFormat.Png);
Response.ClearContent() ;//更改http ContentType
Response.ContentType= "image/Png ";
Response.BinaryWrite(ms.ToArray());
//回收资源
g.Dispose();
Img.Dispose();
Response.End();
}
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9 " ;
string[] VcArray = Vchar.Split( ', ') ;
string VNum = " " ;//由于字符串很短,就不用StringBuilder了
int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数

//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(9) ;
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];

}
return VNum ;
}


生成之后会存在session里面 比较时取session值进行比较
如果不明白加我msn:macd004@hotmail.com