- PR -

C# BitmapのイメージデータをByte配列に取り出したい

1
投稿者投稿内容
ヨンジュン
常連さん
会議室デビュー日: 2003/09/29
投稿数: 22
投稿日時: 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 も参照したかったからです。

よろしくお願い致します。

rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2004-12-16 16:09
今日は

ヘッダーにあるヘッダーサイズを読み取り、その分をms.positionで飛ばし、そこより
ms.Write(image,0,image.length)バイトコピーでいけると思います。
imageは必要サイズを事前に確保しておく必要が有ります。
BMPの場合はヘッダーサイズは2種類あります(12と40)
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2004-12-17 00:24
引用:

ヨンジュンさんの書き込み (2004-12-16 14:16) より:
Bitmapのイメージデータ部分のみをbyte配列に取り出したいのですが
うまくいきません。



http://www.codeproject.com/cs/media/csharpgraphicfilters11.asp

のソースが参考になると思います。

[ メッセージ編集済み 編集者: よねKEN 編集日時 2004-12-17 00:26 ]
ヨンジュン
常連さん
会議室デビュー日: 2003/09/29
投稿数: 22
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)