32-битные RGB BMP в 24-битные RGB BMP в C # проблема - PullRequest
0 голосов
/ 11 февраля 2011

Мне нужно преобразовать 32-битные изображения RGB BMP в 24-битные RGB BMP.

Это то, что я пытаюсь сделать

Bitmap b1=new Bitmap(sorecFileName);

Bitmap b2=new 

Bitmap(b1.Size.Width,b1.Size.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);       
b2.SetResolution(b1.HorizontalResolution, b1.VerticalResolution);

Graphics g=Graphics.FromImage(b2);

g.DrawImage(b1,0,0);

//continue to draw on g here to add text or graphics.

g.Dispose();

b2.Save(destinationFileName);

Код прекрасно компилируется и генерирует выходное изображение 24bpp, но оно больше не в формате rgb. Почему это так?

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

Однако, если я открою тот же файл в Paint и сохраню его как 24bpp BMP, и введу его в функцию, картинка будет отображаться нормально. Что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011
  b2.Save(destinationFileName);

Вы не указали формат файла изображения. По умолчанию используется формат PNG, а не BMP. Теперь у вас, вероятно, есть файл .bmp на диске, который на самом деле содержит изображение PNG. Это может остаться незамеченным в течение долгого времени, многие графические программы обращают внимание на заголовок файла, а не на расширение имени файла. MSPaint, например, не будет иметь проблем с загрузкой файла. Как и любая другая программа, использующая GDI +. Возможно, вам не так повезло с программой, которая слепо предполагает, что файл содержит BMP и вообще не проверяет. Исправлено:

  b2.Save(destinationFilename, System.Drawing.Imaging.ImageFormat.Bmp);
0 голосов
/ 05 октября 2011

если у вас есть blackimage - Добавить г.Очистить (Цвет.Белый);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...