掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
PCカメラからVBに画像を取り込む方法 (ID:85198)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
くまさんの言うとおりPrintScreen方式の方が難しいでしょう。(^^; 普通のツールだったらデフォルトでオーバーレイのレンダラを使いますから。 DirectShowを使って、ピクチャーボックスに表示させるならこんな感じです。 (一年前ぐらいにDirectShowを試したときに作った奴を修正して ダイエットしたやつなのでエラー処理なんぞほとんどしてません。 またWindowsXPで画面モードが32ビットでないと動かないかも) (1)「ActiveMovie control type library」を参照設定 (2)フォームにPictureBox(名前:Picture1)を配置 (3)下記コードをコピペ&ゴー Option Explicit Private Type BITMAPINFOHEADER '40 bytes 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 Private Declare Function SetDIBitsToDevice Lib "gdi32" ( _ ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, _ ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, _ BitsInfo As BITMAPINFOHEADER, ByVal wUsage As Long) As Long Private mGraph As FilgraphManager Private Sub Form_Load() Set mGraph = New FilgraphManager 'キャプチャフィルタを探してグラフに追加 Dim regflt As IRegFilterInfo Dim flt As IFilterInfo For Each regflt In mGraph.RegFilterCollection If regflt.Name = "PC Camera (6005 CIF)" Then 'カメラのフィルタ名 regflt.Filter flt Exit For End If Next 'グラフ作成(手抜き) Dim pp As IPinInfo flt.Pins.Item 0, pp pp.Render 'PictureBoxのサイズを変更 Dim bv As IBasicVideo Dim vx As Long, vy As Long Me.ScaleMode = vbPixels Set bv = mGraph bv.GetVideoSize vx, vy With Picture1 .BorderStyle = 0 .Move 0, 0, vx, vy .AutoRedraw = True End With 'ビデオレンダラウィンドウを隠す Dim vw As IVideoWindow Set vw = mGraph vw.Owner = Me.hWnd vw.SetWindowPosition -vx, -vy, vx, vy 'カメラ起動 mGraph.Run End Sub Private Sub Timer1_Timer() If mGraph Is Nothing Then Exit Sub 'ビデオサイズ取得 Dim bv As IBasicVideo Dim vx As Long, vy As Long Set bv = mGraph bv.GetVideoSize vx, vy 'ビットマップ読み込み Dim sz As Long Dim img() As Long sz = 10 + vx * vy ReDim img(sz - 1) bv.GetCurrentImage sz * 4, img(0) '描画準備 Dim bi As BITMAPINFOHEADER With bi .biSize = Len(bi) .biWidth = vx .biHeight = vy .biPlanes = 1 .biBitCount = 32 End With '描画 SetDIBitsToDevice Picture1.hdc, 0, 0, vx, vy, 0, 0, 0, vy, img(0), bi, 0 Picture1.Refresh End Sub カメラのフィルタ名はカメラ毎に違いますから お使いのカメラに合わせて変更する必要があります。 名前は・・・DirectX SDK付属ツールのGRAPHEDITあたりで調べてください(^^; ちなみにDirectShow関係の書籍を探されるもいいですが、 DirectX-8 SDKのVC用ヘルプにVB用の記述がありますよ。 Googleで「VB DirectShow」で検索すれば サンプルコードだって見つかりますし。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.