sample_camera_preview.hsp

sample\iron\sample_camera_preview.hsp » Plain Format

;============================================================
;  iron_camera サンプル: Webcam リアルタイムプレビュー
;
;  hspcv4 (内部 OpenCV → MSMF) を使ってカメラ映像を HSP ウィンドウに
;  リアルタイム表示するシンプルプレイヤー。
;
;  機能:
;    - カメラ自動検出 (デバイス 0 = 既定のカメラ)
;    - リアルタイムプレビュー (~30fps)
;    - スナップショット保存 (S キーで snapshot.png 出力)
;    - 終了 (ESC キー)
;    - FPS 表示
;
;  操作:
;    - S キー: 現在のフレームを snapshot.png に保存
;    - ESC  : 終了
;============================================================

#include "hsp3_net_64.as"
#include "hspcv4.as"
#include "iron_camera.hsp"

	title "iron_camera — Webcam リアルタイムプレビュー"

	; カメラを開く
	iron_camera_open 0
	if stat = 0 {
		iron_camera_size cw, ch
	} else {
		dialog "カメラ 0 を開けませんでした。\nWebcam が接続されているか確認してください。", 1
		end
	}

	; カメラ解像度に合わせてウィンドウ作成 (UI 領域 +60px)
	if cw <= 0 : cw = 640
	if ch <= 0 : ch = 480
	screen 0, cw, ch + 60
	font "MS Gothic", 14

	; FPS 計測用
	tick_prev = gettime(7) + gettime(6) * 1000
	frame_count = 0
	fps_disp = 0.0

*main_loop
	; ESC で終了
	stick k_esc, 0
	if k_esc & 128 : goto *do_exit

	; S キーでスナップショット
	getkey k_s, 'S'
	if k_s {
		iron_camera_save "snapshot.png"
		snap_msg_until = gettime(7) + gettime(6) * 1000 + 1500
	}

	; フレーム取得
	iron_camera_read
	if stat ! 0 {
		await 30
		goto *main_loop
	}

	; 画面更新
	redraw 0
	; カメラ画像描画
	iron_camera_draw 0, 0

	; UI バー (画像下)
	color 32, 32, 32 : boxf 0, ch, cw, ch + 60 : color 0, 0, 0
	color 255, 255, 255
	pos 10, ch + 10
	mes strf("解像度: %d x %d   FPS: %.1f", cw, ch, fps_disp)
	pos 10, ch + 30
	mes "[S] スナップショット保存   [ESC] 終了"
	color 0, 0, 0

	; スナップショットメッセージ
	now_ms = gettime(7) + gettime(6) * 1000
	if snap_msg_until > now_ms {
		color 255, 255, 0
		pos cw - 200, ch + 10
		mes "snapshot.png 保存しました"
		color 0, 0, 0
	}

	redraw 1

	; FPS 計算 (1 秒ごと)
	frame_count++
	tick_now = gettime(7) + gettime(6) * 1000
	if tick_now - tick_prev >= 1000 {
		fps_disp = double(frame_count) * 1000.0 / double(tick_now - tick_prev)
		tick_prev = tick_now
		frame_count = 0
	}

	await 16
	goto *main_loop

*do_exit
	iron_camera_close
	end