感圧紙の「赤」を見ちゃダメ RGB値で加圧力を数値化する方法冴えない機械の救いかた(5)(5/5 ページ)

» 2026年05月25日 08時00分 公開
前のページへ 1|2|3|4|5       

ビットマップ形式の画像データを読み取る「Visual Basic」のソースコード

 最後に、ビットマップ形式の画像データを読み取るVisual Basicのソースコードを掲載します。「Visual Basic 2010」で動作確認済みです。62〜68行目が注意点となります。このソースコードは、Windows 3.1マシンの16bit版Visual Basicで作ったものですが、画像データ1行分のバイト数が4バイト(つまり32bit)の整数倍になるようにしてあります。すぐにWindowsが32bit化されることを見越して、データ構造を設計していたわけです。

Option Explicit On
Imports System.Math
 
Public Class Form1
    Structure FileHeader
        Dim Type1 As Byte
        Dim Type2 As Byte
        Dim Size As Integer
        Dim Reserved1 As Short
        Dim Reserved2 As Short
        Dim OffBits As Integer
    End Structure
    Public BitmapFileHeader As FileHeader
 
    Structure InfoHeader
        Dim Size As Integer
        Dim Width As Integer
        Dim Height As Integer
        Dim Planes As Short
        Dim BitCount As Short
        Dim Compression As Integer
        Dim SizeImage As Integer
        Dim XPelsPerMeter As Integer
        Dim YPelsPerMeter As Integer
        Dim ClrUsed As Integer
        Dim ClrImportant As Integer
    End Structure
    Public BitmapInfoHeader As InfoHeader
 
    Public rmap(257, 257) As Byte          'RGB data
    Public gmap(257, 257) As Byte
    Public bmap(257, 257) As Byte
    Public buf() As Byte
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim iv, k4, i, k, ih, width3 As Integer
        Dim ih3 As Integer
        Dim flen As Integer
        Dim s As String
        Dim ier As Integer
        Dim map_n As String
 
        map_n = "c:\Temp\test_image.bmp"
 
        ier = 1
        On Error GoTo Read_mapdata_Er
        flen = CInt(FileLen(map_n))
 
        FileOpen(1, map_n, OpenMode.Binary)
        FileGet(1, BitmapFileHeader, 1)
        FileGet(1, BitmapInfoHeader)
 
        If BitmapInfoHeader.BitCount <> 24 Then
            MsgBox("BitmapInfoHeader.BitCount=" & CStr(BitmapInfoHeader.BitCount), 0, "Mapping data file must be 24bit BMPfile.")
            GoTo read_mapdata_close_f
        End If
 
        width3 = BitmapInfoHeader.Width * 3
        k = width3 Mod 4
        If k = 0 Then
            k4 = width3
        Else
            k4 = width3 + 4 - k
        End If
 
        ReDim buf(k4 - 1)
 
        For iv = BitmapInfoHeader.Height To 1 Step -1
            If EOF(1) Then MsgBox("Filename " & map_n, 0, "Error in Reading mapping data.") : GoTo read_mapdata_close_f
            FileGet(1, buf)
            For ih = 1 To BitmapInfoHeader.Width
                ih3 = ih * 3
                bmap(ih, iv) = buf(ih3 - 3)
                gmap(ih, iv) = buf(ih3 - 2)
                rmap(ih, iv) = buf(ih3 - 1)
            Next ih
        Next iv
 
        FileClose(1)
        ier = 0
 
        Exit Sub
 
read_mapdata_close_f:
        FileClose(1)
        Exit Sub
 
Read_mapdata_Er:
        FileClose(1)
        s = Err.Description & vbCrLf
        MsgBox(s, 16, "Error at read_mapdata")
 
    End Sub
リスト1 ビットマップ形式の画像データを読み取る「Visual Basic」のソースコード

⇒「連載バックナンバー」はこちら

Profile

高橋 良一(たかはし りょういち)
RTデザインラボ 代表

1961年生まれ。技術士(機械部門)、計算力学技術者 上級アナリスト、米MIT Francis Bitter Magnet Laboratory 元研究員。

構造・熱流体系のCAE専門家と機械設計者の両面を持つエンジニア。約40年間、大手電機メーカーにて医用画像診断装置(MRI装置)の電磁振動・騒音の解析、測定、低減設計、二次電池製造ラインの静音化、液晶パネル製造装置の設計、CTスキャナー用X線発生管の設計、超音波溶接機の振動解析と疲労寿命予測、超電導磁石の電磁振動に対する疲労強度評価、メカトロニクス機器の数値シミュレーションの実用化などに従事。現在RTデザインラボにて、受託CAE解析、設計者解析の導入コンサルティングを手掛けている。⇒ RTデザインラボ


前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR