2011-07-15 76 views
1

我正在滾動我自己的驗證碼,因爲對於客戶的訪問者來說,recaptcha是有點複雜。 我有以下代碼:asp.net - 生成的位圖img標籤src

private Bitmap generateCaptchaNumbers() 
    { 
     Random num1 = new Random(); 
     Random num2 = new Random(); 

     int numQ1; 
     int numQ2; 
     string QString; 

     numQ1 = num1.Next(10, 15); 
     numQ2 = num2.Next(10, 15); 

     QString = numQ1.ToString() + " + " + numQ2.ToString() + " = "; 
     _answer = numQ1 + numQ2; 
     Bitmap bmp = new Bitmap(85, 35); 
     Graphics gfx = Graphics.FromImage(bmp); 
     Font font = new Font("Arial", 18, FontStyle.Bold, GraphicsUnit.Pixel); 
     Rectangle rect = new Rectangle(0, 0, 100, 50); 

     gfx.FillRectangle(Brushes.White, rect); 
     gfx.DrawString(QString, font, Brushes.Blue, 0, 0); 

     return bmp; 
    } 

我怎麼會去展示我的註冊用戶控件內產生BMP?

如果可能,我寧願不需要將生成的bmp保存到磁盤。

回答

2

你必須創建一個HttpHandler的實現了IHttpHandler並返回裏面的ProcessRequest二進制:

context.Response.Clear(); 
context.Response.ContentType = "image/jpeg"; 
MemoryStream stream = new MemoryStream(); 
Bitmap bitmap = generateCaptchaNumbers(); 
bitmap.Save(stream, ImageFormat.Jpeg); 
context.Response.BinaryWrite(stream.GetBuffer()); 

UPDATE:按照此鏈接創建和部署自定義的HttpHandler:http://support.microsoft.com/kb/308001

+0

正是我要說的,+1在我的網站上運行良好 – kaveman

+0

感謝您的回覆。如果我創建了一個ashx文件,我仍然可以訪問會話狀態以保存來自ashx文件的答案嗎? –

+0

是的,如果我拒絕你的問題,你可以使用ProcessRequest方法的上下文參數來訪問會話。例如:context.Session – armandomiani

0

你需要將位圖轉換爲gif,jpg或png,然後將該圖像返回給http響應。同樣將響應的內容類型設置爲image/gif(或jpg,png)以匹配