C#调整索引颜色位图的大小并保持颜色
本文关键字:颜色 调整 索引 位图 | 更新日期: 2023-09-27 18:21:37
我有一个Bitmap
,它是256色索引格式的,我需要调整它的大小,所以我创建了一个24位RGB格式的新Bitmap
,并使用Graphics
对象绘制它,因为我无法从索引的彩色位图创建图形对象。然后我需要将调整大小的图像保存为索引颜色格式,所以我使用FormatConvertedBitmap
转换为索引颜色,如下所示:
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();
这是可行的,但纯色现在是颗粒状的,并包含其他颜色的像素。有没有更好的方法来调整索引彩色图像的大小或保持纯色?
你可以试试GIF编码器,它会强制将图像重新采样回256色。它使用抖动算法。但往往会产生斑点状的伪影,当图像有大面积的相似颜色时,这些伪影就会变得明显,比如蓝天。除了不重新采样之外,没有什么神奇的治疗方法。用我们现在拥有的出色硬件做这件事毫无意义。