2012-03-15 86 views
1

因此,我有一個ashx文件,它可以創建一個寫有文本的圖像。將替代文本添加到以編程方式創建的圖像

//create the image for the string 
Font f = new Font("Arial", 15F); 
Graphics g = Graphics.FromImage(b); 
SolidBrush whiteBrush = new SolidBrush(Color.FromArgb(0,71,133)); 
SolidBrush blackBrush = new SolidBrush(Color.White); 
RectangleF canvas = new RectangleF(0, 0, 105, 45); 
g.FillRectangle(whiteBrush, canvas); 
context.Session["test"] = randomString; 
g.DrawString(context.Session["test"].ToString(), f, blackBrush, canvas); 
context.Response.ContentType = "image/gif"; 
b.Save(context.Response.OutputStream, ImageFormat.Gif); 

當被調用時,它創建我想要的圖像,但意識到它沒有用於輔助功能的替代文本選項。

關於如何添加替代文字到圖像的任何想法?

在我的aspx頁面我有這樣的:

<asp:Image ID="myImage" class="styleimage" src="ImageMaker.ashx" runat="server"/> 

我曾嘗試:

myImage.AlternateText = HttpContext.Current.Session["test"].ToString(); 

我收到NullReferenceException

這顯然發生的原因是Session["test"]在頁面加載後得到填充(所以頁面加載,圖像被渲染,然後處理程序被調用)。

我該如何解決這個問題?

+1

圖像文件不包含「alt」文本。從來沒有。你的意思是HTML圖像元素上的'alt'屬性? – Oded 2012-03-15 16:49:27

+0

正確!很抱歉對於這個誤會。 – tray 2012-03-15 16:51:14

+0

那是什麼與你發佈的圖像生成代碼有關?我在這裏看不到_any_ HTML。 – Oded 2012-03-15 16:51:50

回答

1

您可以在您的page_load中創建會話變量,並在其中分配randomString

然後,您將能夠在處理程序中訪問它以用於創建圖像。

這樣一來,你跟着不同事件的時間表:

  • 會話變量被創建的頁面獲取呈現
  • 處理器上
  • 圖像元素被稱爲

    • 頁面加載
    • 會話變量被引用以獲取字符串
    • 生成圖像
    • 利潤!
  • +0

    您先生是紳士和學者 謝謝! :) – tray 2012-03-19 14:16:04

    0

    alt-text屬於img-tag,它引用處理程序創建的圖像。只要把ALT標籤放在那裏,你就可以走了。

    +0

    你好,謝謝你的回覆。你能解釋一下你準備把alt標籤放在哪裏嗎?謝謝 – tray 2012-03-15 16:58:46

    +0

    爲什麼您需要在創建圖像的同時創建alt-tag。我認爲你需要考慮職責分離,負責創建圖像的一段代碼,以及顯示它的另一段代碼。顯示代碼是包含的代碼,在這裏您應該設置AlternateText。 – 2012-03-16 09:32:46

    相關問題