2014-01-15 2 views
0

Я обрабатываю много разных форматов изображений в своем приложении. К счастью, я смог исправить большую часть работы с форматами изображений в C# WPF. Однако у меня проблема при сохранении изображений:сохранить изображение в оттенках серого как цвет JPEG

Я хотел бы сохранить свои изображения в формате JPEG с помощью JpegBitmapEncoder с профилем RGB. Это прекрасно подходит для форматов цветных изображений. Однако при обращении с изображениями, то есть в формате Gray16 или Gray8, полученные JPEG-файлы будут иметь профиль Grayscale. Мне действительно нужен профиль RGB для моих JPEG!

Я знаю, что могу просто создать новую WriteableBitmap в Bgra32, скопировать на нее данные и использовать ее для создания JPEG. Это, однако, означает, что мне нужно будет обрабатывать разные форматы изображений. Самое главное, я считаю, что этот объезд будет довольно неэффективным в вычислительной области (мне нужно преобразовать много данных изображения!).

Также я не могу использовать какие-либо решения вне C#/WPF (например, Imagemagick).

Я надеюсь, что есть способ решить это легко и эффективно. Я не нашел способа настроить JpegBitmapEncoder для этого, и у меня была попытка с помощью ColorConvertedBitmap, но безрезультатно!

Любые идеи?

+0

Вы хотите покрасить изображение в оттенках серого или просто сохранить его с помощью RGB-каналов, но все еще с серыми цветами? – RononDex

+0

Вы также пробовали [FormatConvertedBitmap] (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.formatconvertedbitmap.aspx)? – Clemens

+0

Мне нужно сохранить его с RGB-каналами, но все еще с серыми цветами, посмотрит FormatConvertedBitmap –

ответ

0

Подсказка для FormatConvertedBitmap дала мне решение моей проблемы! Благодаря RononDex!

FormatConvertedBitmap convertImg = new FormatConvertedBitmap(img, PixelFormats.Bgra32, null, 0); 
JpegBitmapEncoder encoder = new JpegBitmapEncoder(); 
encoder.Frames.Add(BitmapFrame.Create(convertImg)); 
encoder.Save(stream); 
Смежные вопросы