2009-11-19 76 views
4

我想從常規的32位圖像對象創建一個8位索引圖像。C# - 將圖像複製到8位索引圖像

Bitmap img = new Bitmap(imgPath); // 32-bit 
Bitmap img8bit = new Bitmap(imgW, imgH, Format8bppIndexed); // 8-bit 

// copy img to img8bit -- HOW? 

img8bit.Save(imgNewPath, ImageFormat.Png); 

我無法使用SetPixel在逐個像素上進行復制,因爲圖形不適用於索引圖像。

還有其他嗎?

回答

5

我發現一個C# library將位圖轉換爲調色(8位)圖像。該技術速度很快,因爲它直接調用GDI32(Windows圖形系統)。

要轉換爲8bpp的一個灰度調色板(調色板)圖像,做

System.Drawing.Bitmap b0 = CopyToBpp(b,8); 

如果你想轉換爲圖像以不同的調色板,看看CopyToBpp爲源代碼中的註釋建議。請注意,當您轉換爲1bpp或8bpp調色板副本時,Windows將逐個查看每個像素,並將選擇最接近該像素的調色板條目。根據您的源圖像和調色板的選擇,您最終可能會得到僅使用調色板中可用顏色一半的結果圖像。

1

將任意RGBA圖像轉換爲8位索引位圖是非平凡的操作;你必須做一些數學來確定頂級的256種顏色,並將其餘部分(或者做抖動等)。

http://support.microsoft.com/kb/319061除了有一個好的算法外,它還有其他所有的細節,它會給你一個如何開始的想法。