VERSION 5.00
Begin VB.Form frmMain 
   Caption         =   "Camera"
   ClientHeight    =   9495
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   11880
   LinkTopic       =   "frmMain"
   ScaleHeight     =   9495
   ScaleWidth      =   11880
   StartUpPosition =   3  'Windows の既定値
   Begin VB.Timer Timer1 
      Interval        =   10
      Left            =   300
      Top             =   300
   End
   Begin VB.PictureBox picCamera 
      Height          =   9300
      Left            =   100
      ScaleHeight     =   9240
      ScaleWidth      =   11595
      TabIndex        =   0
      Top             =   100
      Width           =   11650
   End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

' ビットマップ API
Private Type BITMAPINFO 'BITMAPINFOHEADER（本当のBITMAPINFOではない）
    data(1064) As Byte
End Type

Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long)

Private m_Eng As CaoEngine
Private m_Ctrl As CaoController
Private m_Img As CaoVariable

Private Sub Form_Load()
    ' CAO エンジンの生成
    Set m_Eng = New CaoEngine
    ' ボードへの接続
    Set m_Ctrl = m_Eng.Workspaces(0).AddController("GINGA", "CaoProv.LinX.GINGA", "", "")
    Set m_Img = m_Ctrl.AddVariable("@BITMAP", "")
End Sub

Private Sub Timer1_Timer()
    Dim i As Long
    Dim bmp() As Byte
    Dim lAddr As Long, lWidth As Long, lHeight As Long
    Dim udtBM As BITMAPINFO
    
    ' 画像の取得
    bmp = m_Img.Value
    
    ' BMPINFOをコピー
    RtlMoveMemory lAddr, bmp(10), 4
    RtlMoveMemory lWidth, bmp(18), 4
    RtlMoveMemory lHeight, bmp(22), 4
    
    ' 画像の高さが-の場合がある
    If (lHeight < 0) Then
        lHeight = -lHeight
    End If
    
    For i = 0 To lAddr - 14 - 1
        udtBM.data(i) = bmp(i + 14)
    Next

    ' 画像表示
    With picCamera
        .Cls
        SetDIBits .hdc, .Image, 0&, lHeight, bmp(lAddr), udtBM, 0&
        .Refresh
    End With
    
End Sub
