- - PR -
C# BitmapのイメージデータをByte配列に取り出したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-16 14:16
こんにちは。
Bitmapのイメージデータ部分のみをbyte配列に取り出したいのですが うまくいきません。 BitmapをいったんMemoryStreamに保存しなおしたんですが BitmapHeader部分のデータも保存されてしまいます。 Bitmap src = new Bitmap("mm.bmp") MemoryStream ms = new MemoryStream(); src.Save ( ms, ImageFormat.Bmp ); byte [] image = ms.ToArray(); // イメージデータ部分のみ取り出したい。 bmpファイルをいったんBitmapに読み込んだのは Width、Height も参照したかったからです。 よろしくお願い致します。 | ||||
|
投稿日時: 2004-12-16 16:09
今日は
ヘッダーにあるヘッダーサイズを読み取り、その分をms.positionで飛ばし、そこより ms.Write(image,0,image.length)バイトコピーでいけると思います。 imageは必要サイズを事前に確保しておく必要が有ります。 BMPの場合はヘッダーサイズは2種類あります(12と40) | ||||
|
投稿日時: 2004-12-17 00:24
http://www.codeproject.com/cs/media/csharpgraphicfilters11.asp のソースが参考になると思います。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2004-12-17 00:26 ] | ||||
|
投稿日時: 2004-12-17 12:02
rvmsさま、よねKENさま、ご返答ありがとうございます。
C#のBitmapクラスのメンバ関数とかプロパティなどから 簡単にイメージデータ部分のみ取り出せるのかと思っていましたが できなさそうですね。 結局、BITMAPFILEHEADER構造体のイメージ画像オフセットアドレスの 位置(ファイルの先頭から10バイト目)を読み出して、 そのオフセットアドレスからBitmap.Width*Bitmap.Height分をReadしました。 このオフセットアドレスもBitmapのプロパティとかで取得できれば いいのになぁ〜と思いました。 今回はMSDNなどでBITMAPFILEHEADERフォーマットを調べて、10バイト目に 入っていると分かり、ソースにはms.Seek(10, SeekOrigin.Begin) って書きました。 ありがとうございました。 |
1