PDA

View Full Version : سوال: ارور GDI لطفا راهنمایی کنید



sun2rise
سه شنبه 21 مرداد 1393, 20:42 عصر
به ارور زیر نگاهی بندازید وقتی که از کد کپچا استفاده میکنم این ارور هنگامی که سایت بارگذاری شده رخ میدهد ولی بر روی کامپیوتر این ارور داده نمیشود
من برای ساخت کد کپچا از کتابخانه های زیر استفاده میکنم
using System.Drawing;
using System.Drawing.Imaging;


دوستان لطفا کمکم کنید مشکل از کجاست؟

aminmousavi
سه شنبه 21 مرداد 1393, 23:55 عصر
سلام دوست عزیز ، اگر تکه کد تون رو میگذاشتید بهتر بود .
برای نمایش عکس تولید شدتون از MemoryStream استفاده میکنید ؟

sadegh.te
چهارشنبه 22 مرداد 1393, 00:19 صبح
سلام از این کد برای تولید کپچا استفاده کن رو هاستم خیلی خوب جواب میده

اول این تصویر زیر رو ذخیره کن و تو برنامه ت یه فولدر به اسم temp درست کن و عکسو بنداز اونجا برای نمونه.
122218
بعد یه کنترل image بزار تو صفحه ای که میخوایی کپچا نشون داده بشه و بعد کد زیر رو به پروژت اضافه کن


using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using System.IO;
using System.Data.SqlClient;
using System.Text;

using System.Drawing.Text;
using System.Drawing.Imaging;
using System.Security.Cryptography;
using System.Drawing;

using System.Xml;

namespace Iran
{
public partial class Dfulte : System.Web.UI.Page
{
string CreateSalt()
{
Random r = new Random();
return r.Next(10000, 99999).ToString();
}

private string GenerateCode()
{
Random r = new Random((int)DateTime.Now.Millisecond);
int maxNumber = 0;
int numberCodeQuantity = 0, alphabeticCodeQuantity = 0;
string code = String.Empty;

maxNumber = r.Next(6, 7);
numberCodeQuantity = 1;

alphabeticCodeQuantity = maxNumber - numberCodeQuantity;

for (int i = 1; i <= numberCodeQuantity; ++i)
{
code += ((char)r.Next(48, 57)).ToString();
}
for (int i = 1; i <= alphabeticCodeQuantity; ++i)
{
code += ((char)r.Next(65, 90)).ToString();
}
return code;
}

string CreateImage(string path, int height, int width)
{
Random r = new Random();
string salt = GenerateCode();
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmp);
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.Clear(Color.White);
System.Drawing.Drawing2D.Matrix mymat = new System.Drawing.Drawing2D.Matrix();
int i;

for (i = 0; i < salt.Length; i++)
{
mymat.Reset();
mymat.RotateAt(r.Next(-30, 0), new PointF(width * (0.12f * i), height * 0.5f));
g.Transform = mymat;
g.DrawString(salt[i].ToString(), new Font("Comic Sans MS", 16, FontStyle.Italic),
Brushes.Black, width * (0.15f * i), height * 0.5f);
g.ResetTransform();
}

bmp.Save(path, ImageFormat.Gif);
g.Dispose();
bmp.Dispose();
g.Dispose();
bmp.Dispose();
return salt;
}
protected void Page_Load(object sender, EventArgs e)
{


if (!Page.IsPostBack)
{
string salt = CreateImage(Server.MapPath(@"temp/") + "temp.gif", 60, 100);
Image1.ImageUrl = "temp/temp.gif";
Session["salt"] = salt;
}
}

و حالا برنامتو اجرا کن اگه مشکلی داشتی بگو.

موفق باشی.