本帖最后由 xuwei296 于 2010-08-10 16:17:39 编辑

解决方案 »

  1.   

    Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 8.5)), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成随机生成器
                Random random = new Random();
                //清空图片背景色
                g.Clear(Color.White);
                //Font font = new System.Drawing.Font("宋体", 10, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
                //System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Black, Color.Black,90, true);
                //g.DrawString(checkCode, font, brush, 2, 2);            g.FillRectangle(new System.Drawing.SolidBrush(Color.Black), 0, 0, image.Width, 20);
                g.Clear(Color.White);
                g.DrawString(checkCode, new Font("宋体", 10, FontStyle.Bold), Brushes.Black, new PointF(5, 5));
                MemoryStream ms = new MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType = "image/Gif";
                Response.BinaryWrite(ms.ToArray());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
      

  2.   

    #region 生成汉字随机数
            /// <summary>
            /// 生成汉字随机数
            /// </summary>
            /// <param name="rd">随机数对象</param>
            /// <param name="intLength">随机数的个数</param>
            /// <returns></returns>
            public static string setRegionCodeRand(Random rd, int intLength)
            {
                string strRegCodeRand = "";
                Encoding encGB = Encoding.GetEncoding("gb2312");
                string[] strBase = new string[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
                object[] objBytes = new object[intLength];
                for (int i = 0; i < intLength; i++)
                {
                    int rnd1 = rd.Next(11, 14);
                    string str_rnd1 = strBase[rnd1].Trim();
                    rd = new Random(rnd1 * unchecked((int)DateTime.Now.Ticks) + i);
                    int rnd2;
                    if (rnd1 == 13)
                    {
                        rnd2 = rd.Next(0, 7);
                    }
                    else
                    {
                        rnd2 = rd.Next(0, 16);
                    }
                    string str_rnd2 = strBase[rnd2].Trim();
                    rd = new Random(rnd2 * unchecked((int)DateTime.Now.Ticks) + i);
                    int rnd3 = rd.Next(10, 16);
                    string str_rnd3 = strBase[rnd3].Trim();
                    rd = new Random(rnd3 * unchecked((int)DateTime.Now.Ticks) + i);
                    int rnd4;
                    if (rnd3 == 10)
                    {
                        rnd4 = rd.Next(1, 16);
                    }
                    else if (rnd3 == 15)
                    {
                        rnd4 = rd.Next(0, 15);
                    }
                    else
                    {
                        rnd4 = rd.Next(0, 16);
                    }
                    string str_rnd4 = strBase[rnd4].Trim();
                    byte byRand1 = Convert.ToByte(str_rnd1 + str_rnd2, 16);
                    byte byRand2 = Convert.ToByte(str_rnd3 + str_rnd4, 16);
                    byte[] byRands = new byte[] { byRand1, byRand2 };
                    objBytes.SetValue(byRands, i);
                }
                string[] strRegCode = new string[intLength];
                for (int j = 0; j < intLength; j++)
                {
                    strRegCode[j] = encGB.GetString((byte[])Convert.ChangeType(objBytes[j], typeof(byte[])));
                    strRegCodeRand += strRegCode[j].Trim();
                }
                return strRegCodeRand;
            }
            #endregionpublic static void strRandMap(string saveImagePath)
            {
                //建立位图对象
                Bitmap bitmap = new Bitmap(90, 30, PixelFormat.Format48bppRgb);
                //根据上面创建的位图对象创建绘图面
                Graphics graphics = Graphics.FromImage(bitmap);
                //以指定的颜色填充矩形区
                graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, 90, 30));
                //创建字体对象
                Font txtFont = new Font("gb2312", 12, FontStyle.Bold);
                //创建RectangleF结构指定一个区域
                RectangleF rectangleF = new RectangleF(0, 0, 90, 30);
                //创建随机数对象
                Random random = new Random();
                //获取随机数
                string strRand = setRegionCodeRand(random, 6);
                //string strRand = setRegionCodeRand(random, 4);
                //使用指定的颜色填充上面RectangleF结构指定的矩形区域
                graphics.FillRectangle(new SolidBrush(Color.BurlyWood), rectangleF);
                StringFormat sformat = new StringFormat();
                sformat.Alignment = StringAlignment.Center;
                sformat.LineAlignment = StringAlignment.Center;
                //在上面填充的矩形区域中填充上面生成的随机数
                graphics.DrawString(strRand, txtFont, new SolidBrush(Color.Blue), rectangleF, sformat);            //把创建的位图保存到指定的路径
                bitmap.Save(HttpContext.Current.Server.MapPath("") + saveImagePath, ImageFormat.Gif);
            }