我有一个BitmapSource(RGB),我希望转换为8bpp灰度。这是我使用的代码:
BitmapSource ConvertToGray8(BitmapSource bitmap)
{
FormatConvertedBitmap newFormattedBitmapSource = new FormatConvertedBitmap();
newFormattedBitmapSource.BeginInit();
newFormattedBitmapSource.Source = bitmap;
newFormattedBitmapSource.DestinationFormat = PixelFormats.Gray8;
newFormattedBitmapSource.EndInit();
return newFormattedBitmapSource;
}
但是,如果我查看结果字节,我会得到这样的结果:
66 66 66 66 77 ff ff ee ff ff ff ff ff ff ff ff ff ee ff ff ff 00 00 00 11 00 00 00 ff
ff dd ff ff ff ff ff ff ff ff ff ff bb 88 88 88 88 ff ff ff ff 99 88 88 88 aa ff ff ff
ff ff ff ff ff ff ff dd ff 88 00 ff ff 22 ff ff 00 88 ff dd ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff dd ff ff cc 66 66 66 66 66 aa ff ff dd ff ff ff ff ff ff ff ff
ff ff dd ff ff 33 00 11 11 11 00 22 ff ff dd ff ff ff ff ff ff ff ff ff ff ff 77 88
似乎只有4位用于转换(即0x0-0xF),然后重复它们以产生8位(即0x00-0xFF)。结果是一个具有16个灰度级的8位图像。
任何线索?如果可能的话,我想尽量避免手工转换。我很好奇为什么会像这样转换。
编辑:
我还使用了the project上显示的this article,结果相同。我开始认为没有真正的8bpp灰度(至少就BMP而言)并且它与索引有关。今天晚些时候会对此进行调查并更新是否有新内容。使用同一个项目,8bpp TIFF似乎可以正确保存。