У меня есть 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).В результате получается 8-битное изображение с 16 уровнями серого.
Есть какие-нибудь подсказки?Я хотел бы попытаться избежать конвертации вручную, если это возможно.Мне в основном любопытно, почему его преобразование происходит следующим образом.
Редактировать:
Я также использовал проект показан на этой статье с такими же результатами.Я начинаю думать, что нет реальной 8bpp градаций серого (по крайней мере, что касается BMP), и это как-то связано с индексацией.Рассмотрим это позже сегодня и обновим, если что-нибудь новое появится.При использовании этого же проекта TIFF 8bpp, похоже, сохраняются правильно.