2010-05-30 1 views
1

Я просто хочу загрузить файл .BMP и получить объект Bitmap в 24-битном формате RGB (или 32-бит в формате RGB).Загрузите растровое изображение из файла в формате RGB (без альфа)

Все методы, которые я попробовал, возвращают объект Bitmap/Image с PixelFormat = Format32bppArgb. Даже если, конечно, BMP не имеют альфы.

new Bitmap(System.Drawing.Image.FromFile(fileName, true)); 
new Bitmap(fileName); 

В настоящее время я решаю проблему, скопировав первый объект на другой в битовой карте памяти на 24-битной RBG.

Есть ли один способ сделать это?

Благодаря

+1

Почему? Что случилось с Format32bppArgb? – SLaks

ответ

0

Что именно вы имеете в виду копирования первого объекта к другому?

Чтобы добиться того, что вы хотите сделать, это означает загрузку изображения и преобразовывая его до 24 бит, просто получить графический контекст второго точечного рисунка, который соответствует размеру и это RGB, и краски исходного растрового изображения на это один.

1

Вы можете клонировать его в формате RGB один:

var bitmapInRgbFormat = loadedBitmap.Clone(new Rectangle(0, 0, loadedBitmap.Width, loadedBitmap.Height), PixelFormat.Format32bppRgb) 
1

Насколько я могу сказать, что это не представляется возможным указать PixelFormat для загрузки растровых изображений с использованием классов в System.Drawing. Для преобразования растрового изображения чека этого вопроса: Converting Bitmap PixelFormats in C#

Это в настоящее время верхнего ответа есть:

 Bitmap orig = new Bitmap(@"c:\temp\24bpp.bmp"); 
     Bitmap clone = new Bitmap(orig.Width, orig.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); 
     using (Graphics gr = Graphics.FromImage(clone)) { 
      gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height)); 
     } 
     // Dispose orig as necessary.. 

Одним из вариантов были бы положить, что в функции, которая принимает имя файла и PixelFormat. Это скрывает уродливый код, который имеет свои взлеты и падения, поскольку он также скрывает тот факт, что он, вероятно, не настолько эффективен.

В соответствии с связанным вопросом SO не всегда работает метод Clone.

Смежные вопросы