私が見るにはどうすればよい「生」PNG画像データ
質問
私はプロプライエタリ(バイエル)形式に48ビットあたりのピクセルのPNGファイルを変換するアプリケーションを作成しようとしています。
コード(ここではの礼儀)以下、いくつかのPNGファイル形式のために素晴らしい作品が、私は、コードをPNG善意の48ビットをしようとすると、例外がスローされます - ?選択肢がある。
static public byte[] BitmapDataFromBitmap(Bitmap objBitmap)
{
MemoryStream ms = new MemoryStream();
objBitmap.Save(ms, ImageFormat.BMP); // GDI+ exception thrown for > 32 bpp
return (ms.GetBuffer());
}
private void Bayer_Click(object sender, EventArgs e)
{
if (this.pictureName != null)
{
Bitmap bmp = new Bitmap(this.pictureName);
byte[] bmp_raw = BitmapDataFromBitmap(bmp);
int bpp = BitConverter.ToInt32(bmp_raw, 28); // 28 - BMP header defn.
MessageBox.Show(string.Format("Bits per pixel = {0}", bpp));
}
}
解決
BMPエンコーダは48bppフォーマットをサポートしていません。あなたはBitmap.LockBits()メソッドを持つ画素の亀裂を得ることができます。ピクセルフォーマットのためのMSDNライブラリの記事は48bppが24bppの画像のように扱われていると言うが、私は実際にこのコードの6つのバイトのピクセルを見ています:
Bitmap bmp = new Bitmap(@"c:\temp\48bpp.png");
BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadOnly, PixelFormat.Format48bppRgb);
// Party with bd.Scan0
//...
bmp.UnlockBits(bd);
所属していません StackOverflow