次のC#コードを使用して、(一部の内部HDRデータから)Format48bppRgb.PNGファイルを作成することができました。
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呼び出しでこれを実行してもかまいませんが、ヒストグラム/画像処理作業のために、解凍された元のデータにアクセスしたいと思います。