2008-11-12 21 views
1

我想在HttpHandler中動態生成一個指定大小和顏色的gif圖像。出於某種原因,圖像是以抖動的顏色模式生成的,而不是我期望創建的純色。下面的代碼是我能找到的最簡單的暴露問題。SolidBrush爲什麼會產生圖案圖像?

private void GenerateSquareImage(String filename, String color, Int32 width) 
{ 
    Bitmap img = new Bitmap(width, width); 
    Graphics g = Graphics.FromImage(img); 
    SolidBrush brush = new SolidBrush(ColorTranslator.FromHtml("#" + color)); 

    g.FillRectangle(brush, 0, 0, width, width); 

    img.Save(filename, System.Drawing.Imaging.ImageFormat.Gif); 
    img.Dispose(); 

    brush.Dispose(); 
    g.Dispose(); 
} 

這裏是在顏色參數傳遞時「415976」我得到的結果的一個示例:

imageshack http://img148.imageshack.us/img148/8936/colorcb5.png

(該塊左邊是一個HTML SPAN與背景 - 顏色設置爲#415976右側的塊是我的圖表,在這裏你可以看到抖動顏色)

結果是相同的,如果我用這個代碼:。

g.Clear(ColorTranslator.FromHtml("#" + color)); 

代替上述方法中的g.FillRectangle調用。

UPDATE:默認情況下,如果任何編程更改是對位圖由GDI +保存與web safe palette GIF格式。這是什麼導致我的非安全調色板顏色抖動。我能夠修改Marco的帖子中引用的代碼(http://msdn.microsoft.com/en-us/library/aa479306.aspx),以修改我剛創建的圖像上的調色板,以便我的顏色得到尊重。

回答

2

就我所知,GIF文件被限制爲256種顏色,所以它會採用抖動。 PNG可能是您需要的格式。

或者你可以看看here的解決方案,使用一個複雜的量化器來構建一個自定義調色板(我不承擔鏈接代碼的責任,從來沒有嘗試過自己)。

這個other link from Microsoft對問題有深入的分析。

希望這會有所幫助。

+0

查看我對原始問題的更新。這個答案最終指出我的解決方案。 – JeffK 2008-12-03 15:04:24

0

IIRC GIF僅限於.NET上的特定托盤。有解決方法,但他們超出我的理解。

相關問題