- - PR -
ビットマップファイルの画像データ部分のみをバイナリデータに読み取る方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-16 20:36
開発環境
VS2005 VB.NET 現状、以下のようにビットマップファイルをバイナリデータとして読み出しています。 Dim strBmpPath As String ="C:\・・・・\XXX.bmp" Dim fs As New System.IO.FileStream(strBmpPath, System.IO.FileMode.Open, System.IO.FileAccess.Read) Dim reader As New System.IO.BinaryReader(fs) Dim bmpBytes(CInt(fs.Length - 1)) As Byte bmpBytes = reader.ReadBytes(CInt(fs.Length)) しかしこれではビットマップのファイルヘッダ(14byte)と情報ヘッダ(Windowsの場合40byte?)が入ってしまいます。 ファイルヘッダと情報ヘッダを除く画像データ部分のみを取得する方法をご教授ください。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-02-16 21:23
BinaryReaderで読み込まずにBitmapクラスを使ってはどうでしょうか。
LockBitsメソッドを使うことでたぶん期待されていることができると思います。 KEN's .NETの 「[メモ] VB.NETに関するメモ書き」の 23:[ 画像処理 ]が参考になると思います。 | ||||||||
|
投稿日時: 2007-02-16 22:53
よねKEN様
返答ありがとうございます。 リンクを元に作ってみました。 画像はモノクロなのですが、このままではカラーのようです。 後出しの情報で申し訳ありません。 ご教授お願いいたします。 Dim bmp As New System.Drawing.Bitmap(strBmpPath) Dim bmpWidth As Integer = bmp.Width Dim bmpHeight As Integer = bmp.Height Dim rect As New Rectangle(0, 0, bmpWidth, bmpHeight) Dim bmpData As BitmapData = bmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb) Dim stride As Integer = bmpData.Stride Dim Scan0 As System.IntPtr = bmpData.Scan0 Dim bmpBytes(stride * bmpHeight - 1) As Byte System.Runtime.InteropServices.Marshal.Copy(Scan0, bmpBytes, 0, stride * bmpHeight) bmp.Dispose | ||||||||
|
投稿日時: 2007-02-16 23:15
Bitmap.LockBits() に PixelFormat.Format24bppRgb を渡してるようですから、それが正常な動作です。 どっちにしろ Bitmap クラスはモノクロ画像を「そのまま」扱うのには向いていないので、RGB 値から階調を計算で求めるのでは駄目なのですか? | ||||||||
|
投稿日時: 2007-02-17 00:20
渋木宏明(ひどり)様
返答ありがとうございます。 モノクロ画像の画像データのみをバイナリデータとして読み出したいのですが、 RGB 値から階調を計算で求める方法しかないでしょうか? またその場合、まったく方法がわかりません。 具体的な方法を教えていただけないでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-02-17 01:04
| ||||||||
|
投稿日時: 2007-02-17 14:16
.bmp ファイルの保存形式にはいくつかの系統があることは把握しているでしょうか? 扱おうとしている .bmp ファイルが「Windows Bitmap 形式, 256色, パレット」であることが事前に分かっているなら、既にコメントが付いている通り、ビットマップファイルヘッダとビットマップファイルヘッダの分読み飛ばせばパレットデータとビットマップデータを読み取ることが出来ます。 一方、「256色階調の画像」が上記以外の形式(=例えば Windows Bitmap 形式, 24bit カラー等)で保存されてる場合、結局は RGB 値から階調を算出することになります。
一般的には、色空間を RGB から YUV に変換した時、Y成分(=輝度)を階調とします。 RGB から YUV への変換式は検索すればすぐみつかるはずです。 |
1