img.Save (ms, ImageFormat.Bmp); не сохраняет PixelFormat

г создать файл Format48bppRgb .PNG (из некоторых внутренних данных HDR), используя следующий код C #:

Bitmap bmp16 = new Bitmap(_viewer.Width, _viewer.Height, System.Drawing.Imaging.PixelFormat.Format48bppRgb);
System.Drawing.Imaging.BitmapData data16 = bmp16.LockBits(_viewer.ClientRectangle, System.Drawing.Imaging.ImageLockMode.WriteOnly, bmp16.PixelFormat);
unsafe {  (populates bmp16) }
bmp16.Save( "C:/temp/48bpp.png", System.Drawing.Imaging.ImageFormat.Png );

ImageMagik (и другие приложения) проверяют, что это действительно изображение 16bpp:

C:\temp>identify 48bpp.png
48bpp.png PNG 1022x1125 1022x1125+0+0 DirectClass 16-bit 900.963kb

Однако я был разочарован, обнаружив, что при чтении PNG он был преобразован в Format32bppRgb при использовании:

Bitmap bmp = new Bitmap( "c:/temp/48bpp.png", false );
String info = String.Format("PixelFormat: {0}", bmp.PixelFormat );
...

Учитывая, что кодек PNG может записывать Format48bppRgb, есть ли способ использовать .NET для чтения без преобразования? Я не против, если это будет сделано для вызова DrawImage, но я хотел бы получить доступ к распакованным исходным данным для некоторой работы по обработке гистограммы / изображения.

Ответы на вопрос(2)

Ваш ответ на вопрос