Получение цветного изображения из растрового изображения, в то время как изображение 16bppGrayscale

Проблема №1. Моя собственная связанная проблема

Я задал следующий вопрос здесь

Теперь Проблема № 2.

Когда я пытаюсь открыть 16-битные (монохромные) изображения из необработанных данных пикселей, я получаю сообщение об ошибке. Поскольку я использую PixelFormat.Format16bppGrayscale при создании растрового изображения, например

Bitmap bmp = new Bitmap(Img_Width, Img_Height,PixelFormat.Format16bppGrayscale);

Поэтому погуглил и обнаружил, что Format16bppGrayscale не поддерживается, поэтому я изменил свой код, как показано ниже.

 PixelFormat format = PixelFormat.Format16bppRgb565;
 Bitmap bmp = new Bitmap(Img_Width, Img_Height, format);
 Rectangle rect = new Rectangle(0, 0, Img_Width, Img_Height);
 BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, format);
 Marshal.Copy(rawPixel, 0, bmpData.Scan0, rawPixel.Length);
 bmp.UnlockBits(bmpData);

Удивительно то, что я получаю изображение сейчас, потому что я меняю формат пикселя. Но проблема в том, что мое монохромное (оттенки серого) изображение выглядит в разных цветах.

Как я могу получить первоначальный вид. Я попробовал несколько методов в градациях серого, но безуспешно. Пожалуйста, дайте мне какой-нибудь небезопасный код. Спасибо,


person prashant    schedule 28.04.2009    source источник
comment
Это помогает? eggheadcafe.com/forumarchives/NETFrameworkdrawing/Nov2005/   -  person hometoast    schedule 29.04.2009


Ответы (2)


В FAQ Боба Пауэлла по GDI+ есть немного об оттенках серого . 16 бит на пиксель в .NET просто не работает. Приходится все делать в 32 bpp и прибегать к внешним инструментам для конвертации. К счастью (?) Я чаще всего использую изображения в формате TIFF. Также может помочь эта тема.

person hometoast    schedule 28.04.2009
comment
Я ранее видел этот пост. Я видел часто задаваемые вопросы BobPowell и пробовал этот код. Цвет изображения просто изменен на какой-то случайный цвет, но не в оттенках серого. Я также видел этот пост из байткода. Он спрашивает то же, что и я. Я также работаю над медицинскими изображениями. - person prashant; 29.04.2009

Вам нужно изменить поддон на поддон в оттенках серого. Палитра по умолчанию для 8bppIndexed — 256 цветов. Вы можете изменить его следующим образом:

ColorPalette pal = myBitmap.Palette;

for (int i = 0; i < pal.Entries.Length; i++)
    pal.Entries[i] = Color.FromArgb(i, i, i);

myBitmap.Palette = pal;
person badbod99    schedule 02.07.2009