2012-01-28 80 views
0

我有一個Bitmap這是256色索引的格式,我需要調整,所以我創建一個新的Bitmap 24位RGB格式,並使用Graphics對象爲我繪製無法從索引的顏色位圖創建圖形對象。然後我需要保存調整後的圖像回爲索引顏色格式,所以我用FormatConvertedBitmap轉換爲索引顏色是這樣的:C#調整索引色位,並保持顏色

BitmapSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap(bmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); 
FormatConvertedBitmap converted = new FormatConvertedBitmap(); 
converted.BeginInit(); 
converted.Source = bitmapSource; 
converted.DestinationFormat = System.Windows.Media.PixelFormats.Indexed8; 
converted.DestinationPalette = new BitmapPalette(bitmapSource, 256); 
converted.EndInit(); 

這個工作,但是純色現在顆粒感和含有其他顏色的像素。是否有更好的方法來調整索引的彩色圖像的大小或保持純色?

回答

1

是的,這是相當不可避免的。要控制影響的核心屬性是Graphics.InterpolationMode。像Bicubic這樣的高品質選擇會爲調整大小的圖像添加許多顏色。試圖將其重新分成256種顏色會產生粒狀圖像。您可以使用NearestNeighbor來減少添加的顏色數量,但最終會顯示塊狀圖像。

您可以嘗試使用GIF編碼器,它也被迫將圖像重新採樣回256色。它使用抖動算法。但是當圖像具有相似顏色的大面積時(如藍天),往往會產生斑點狀的文物。除了簡單的不重新採樣以外,沒有什麼神奇的治療方法。用這些天我們擁有的精美硬件來做這件事毫無意義。