//画布
            Bitmap bmp = new Bitmap(170, 100);
            Graphics g = Graphics.FromImage(bmp);
            //g.Clear(Color.Transparent);//背景色
            //字体            
            Font newFont = new Font("宋体", 36);
            //画笔
            SolidBrush colorBrush = new SolidBrush(Color.Black);//字为黑色的、保存后背景也就变黑了
            //内容(名字)
            string text = "嘿嘿";
            //绘画
            g.DrawString(text, newFont, colorBrush, new PointF(0, 30));
            //清除该页输出缓存,设置该页无缓存 
            Response.Buffer = true;
            Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            Response.Expires = 0;
            Response.CacheControl = "no-cache";
            Response.AppendHeader("Pragma", "No-Cache");
            //将验证码图片写入内存流,并将其以 "image/png" 格式输出 
            MemoryStream ms = new MemoryStream();
            try
            {
                bmp.Save(ms, ImageFormat.Png);
                Response.ClearContent();
                Response.ContentType = "image/png";
                Response.BinaryWrite(ms.ToArray());
            }
            finally
            {
                //显式释放资源 
                bmp.Dispose();
                g.Dispose();
                
            }

解决方案 »

  1.   

    一保存格式怎么才能可选、不只是bmp格式。
    二保存图片后背景怎么能做到还是透明的。
      

  2.   

            //画布
            Bitmap bmp = new Bitmap(170, 100);
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.White);//背景色
            //字体   
            Font newFont = new Font("宋体", 36);
            //画笔
            SolidBrush colorBrush = new SolidBrush(Color.Black);//字为黑色的、保存后背景也就变黑了
            //内容(名字)
            string text = "嘿嘿";
            //绘画
            g.DrawString(text, newFont, colorBrush, new PointF(0, 30));
            //清除该页输出缓存,设置该页无缓存  
            Response.Buffer = true;
            Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            Response.Expires = 0;
            Response.CacheControl = "no-cache";
            Response.AppendHeader("Pragma", "No-Cache");
            //将验证码图片写入内存流,并将其以 "image/png" 格式输出  
            MemoryStream ms = new MemoryStream();
            try
            {
                bmp.Save(ms, ImageFormat.Png);
                Response.Clear();
                Response.ContentType = "image/png";
                Response.BinaryWrite(ms.ToArray());
            }
            finally
            {
                //显式释放资源  
                bmp.Dispose();
                g.Dispose();        }
      

  3.   

    //g.Clear(Color.Transparent);//背景色
    注释后、保存的就是黑色。
      

  4.   

    //画布
      Bitmap bmp = new Bitmap(170, 100);  Graphics g = Graphics.FromImage(bmp);
      g.Clear(Color.Gray);//背景色
      //字体    Font newFont = new Font("宋体", 36);
      //画笔
      SolidBrush colorBrush = new SolidBrush(Color.Black);//字为黑色的、保存后背景也就变黑了
      //内容(名字)
      string text = "嘿嘿";
      //绘画
      g.DrawString(text, newFont, colorBrush, new PointF(0, 30));
      //清除该页输出缓存,设置该页无缓存 
      Response.Buffer = true;
      Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
      Response.Expires = 0;
      Response.CacheControl = "no-cache";
      Response.AppendHeader("Pragma", "No-Cache");
      //将验证码图片写入内存流,并将其以 "image/png" 格式输出 
      bmp.MakeTransparent(System.Drawing.Color.Gray);
      MemoryStream ms = new MemoryStream();
      try
      {
      bmp.Save(ms, ImageFormat.Png);  Response.ClearContent();
       
      Response.ContentType = "image/png";  Response.BinaryWrite(ms.ToArray());
      }
      finally
      {
      //显式释放资源 
      bmp.Dispose();
      g.Dispose();  }
      

  5.   

    关键是
    g.Clear(Color.Gray);//背景色bmp.MakeTransparent(System.Drawing.Color.Gray);
      

  6.   

    嗯、在bmp.MakeTransparent(System.Drawing.Color.Gray);之前可以保存有背景的图片。
    可是我是先输出到浏览器、要是用户要保存就保存、不保存就没了。
    只是用户想保存的时候、浏览器看着是透明背景的、保存后背景是黑色的了。
      

  7.   

    应该是因为没有图片名导致,所以IE默认为BMP.我把一些图片的名字改成中文,另存后也默认是bmp格式
    firfox就可以保存png。
      

  8.   

    我输出的是png格式的、保存时只能选bmp格式的