#293 ビットマップファイルの情報取得 VBA

ビットマップファイル(.BMP)の画像情報を取得する方法です。

ビットマップファイルの情報は、そのファイルのヘッダー部に書き込まれています。ビットマップファイルをバイナリモードで開いて、1レコード目(構造体の長さ分)を読み込むことによってBITMAPFILEHEADER構造体に対応した情報を得ることができます。また、2レコード目を読み込むことによってBITMAPINFOHEADER構造体に対応した情報を得ることができます。前者の構造体にはファイルサイズなどの情報が格納されます。また後者の構造体には画像の幅や高さ、解像度など、ビットマップ特有の情報が格納されます。

次の例は、それらの機能を利用した「GetBMPSize」というオリジナル関数のサンプルです。この関数では、ビットマップファイルのパスを引数として指定することによって、いくつかの画像の情報を文字列として返します。
Private Type BITMAPFILEHEADER
  bfType As Integer
  bfSize As Long
  bfReserved1 As Integer
  bfReserved2 As Integer
  bfOffBits As Long
End Type

Private Type BITMAPINFOHEADER
  biSize As Long
  biWidth As Long
  biHeight As Long
  biPlanes As Integer
  biBitCount As Integer
  biCompression As Long
  biSizeImage As Long
  biXPelsPerMeter As Long
  biYPelsPerMeter As Long
  biClrUsed As Long
  biClrImportant As Long
End Type

Public Function GetBMPSize(strFilePath As String) As String
'概要 指定のビットマップファイルの情報を取得する
'引数 strFilePath : ビットマップファイルのパス
'返値 画像サイズ・ビット・ファイルサイズの文字列

  Dim tBmpFileHeader As BITMAPFILEHEADER
  Dim tBmpInfoHeader As BITMAPINFOHEADER
  Dim lngFileNum As Long
  Dim strSize As String
  Dim strColor As String
  Dim strFileSize As String

  lngFileNum = FreeFile()
  Open strFilePath For Binary As #lngFileNum
  Get #lngFileNum, , tBmpFileHeader
  Get #lngFileNum, , tBmpInfoHeader
  Close #lngFileNum

  With tBmpInfoHeader
    strSize = .biWidth & "×" & .biHeight
    Select Case .biBitCount
      Case 1
        strColor = "モノクロ"
      Case 4
        strColor = "16色"
      Case 8
        strColor = "256色"
      Case 24
        strColor = "24ビット"
    End Select
    strFileSize = "(" & CStr(tBmpFileHeader.bfSize) & "Byte)"
  End With

  GetBMPSize = strSize & " " & strColor & strFileSize

End Function

使用例:
Debug.Print GetBMPSize("c:\windows\大草原の風.bmp")
Debug.Print GetBMPSize("c:\windows\フィッシング.bmp")
Debug.Print GetBMPSize("c:\windows\珈琲カップ.bmp")
実行結果
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved