2014-01-15 2 views
0

내 응용 프로그램 내에서 많은 다른 이미지 형식을 처리하고 있습니다. 다행히도 C# WPF의 이미지 형식을 다루는 데있어서 가장 큰 부분을 찾을 수있었습니다. 그러나 이미지를 저장할 때 문제가 발생했습니다.그레이 스케일 이미지를 컬러 JPEG로 저장

RGB 프로필로 JpegBitmapEncoder를 사용하여 이미지를 JPEG로 저장하고 싶습니다. 이것은 컬러 이미지 형식에 대해 모두 잘 작동합니다. 그러나 이미지를 처리 ​​할 때 즉 Gray16 또는 Gray8 형식 인 경우 결과 JPEG는 회색 음영 프로파일을 갖습니다. 내 JPEG의 RGB 프로파일이 정말로 필요합니다!

Brite32에서 새로운 WriteableBitmap을 만들고 데이터를 복사하여 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);