//
// カメラサンプル
// camera_sample.imw3
//
// カメラからの画像を加工する
//
TIMER
{
CopyBMP(cam,0,0,CAMERA_W,CAMERA_H, fin,0,0,CAMERA_W,CAMERA_H,0) ; // カメラ画面を完成画面へコピー
// 完成画面をモザイク化 縮小してから拡大
if(moz == 1){
CopyBMP(fin,0,0,CAMERA_W,CAMERA_H, fin,0,0,CAMERA_W/16,CAMERA_H/16,0) ;
CopyBMP(fin,0,0,CAMERA_W/16,CAMERA_H/16, fin,0,0,CAMERA_W,CAMERA_H,0) ;
}
if(binari == 1){
BinariBMPColor(fin,0,0,CAMERA_W,CAMERA_H,binari_d,binari_d,binari_d) ; // 完成画面を2値化
}
if(mono == 1){
GrayBMPColor(fin,0,0,CAMERA_W,CAMERA_H,0) ; // 完成画面をモノクロ化
}
if(bright == 1){
ShiftBMPColor(fin,0,0,CAMERA_W,CAMERA_H,fin,0,0,bright_d) ; // 完成画面を明暗調整
}
if(out == 1){
CopyBMP(fin,0,0,CAMERA_W,CAMERA_H, sub,0,0,CAMERA_W,CAMERA_H,0) ; // 完成画面をサブ画面へコピー
CopyBMP(sub,0,0,CAMERA_W,CAMERA_H, sub,1,0,CAMERA_W,CAMERA_H,4) ; // サブ画面を輪郭化(横)
CopyBMP(fin,0,0,CAMERA_W,CAMERA_H, fin,0,1,CAMERA_W,CAMERA_H,4) ; // 完成画面を輪郭化(縦)
CopyBMP(sub,0,0,CAMERA_W,CAMERA_H, fin,0,0,CAMERA_W,CAMERA_H,2) ; // サブ画面を完成画面に合成
}
if(filter == 1){
SetPal(10,filter_r,filter_g,filter_b) ; FullPaint(sub,10) ; // サブ画面を指定色で塗りつぶす
CopyBMP(sub,0,0,CAMERA_W,CAMERA_H, fin,0,0,CAMERA_W,CAMERA_H,2) ; // サブ画面を完成画面に合成
}
// 完成画面をモニター画面へコピー
CopyBMP(fin,x1,y1,w1,h1, 0,120,4,CAMERA_W*r_l,CAMERA_H*t_b,rev) ;
}
INIT
{
cam_open = 0 ; // カメラ接続
big = 0 ; x1 = 0 ; y1 = 0 ; w1 = CAMERA_W ; h1 = CAMERA_H ; // 拡大
r_l = 1 ; // 左右反転
t_b = 1 ; // 上下反転
rev = 0 ; // 色反転
filter = 0 ; filter_r = 0 ; filter_g = 0 ; filter_b = 250 ; // フィルター色
SetScrollRange("ID_filter_r",255) ; SetScrollPos("ID_filter_r",filter_r) ;
SetScrollRange("ID_filter_g",255) ; SetScrollPos("ID_filter_g",filter_g) ;
SetScrollRange("ID_filter_b",255) ; SetScrollPos("ID_filter_b",filter_b) ;
bright = 0 ; bright_d = 100 ; // 明暗
SetScrollRange("ID_bright_d",150) ; SetScrollPos("ID_bright_d",bright_d-50) ;
binari = 0 ; binari_d = 127 ; // 2値化
SetScrollRange("ID_binari_d",255) ; SetScrollPos("ID_binari_d",binari_d) ;
mono = 0 ; // モノクロ
out = 0 ; // 輪郭
moz = 0 ; // モザイク
}
CREATE
{
SetWinSize(800,550) ;
SetWinColor(15) ;
x = 8 ; y = 8 ;
CreateControl(0,"カメラ ON/OFF","ID_open_cam",x,y,100,30) ; y = y + 34 ;
CreateControl(20,"拡大","ID_big",x,y,100,24) ; y = y + 24 ;
CreateControl(20,"左右反転","ID_r_l",x,y,100,24) ; y = y + 24 ;
CreateControl(20,"上下反転","ID_t_b",x,y,100,24) ; y = y + 24 ;
CreateControl(20,"色反転","ID_rev",x,y,100,24) ; y = y + 30 ;
CreateControl(20,"フィルター","ID_filter",x,y,100,20) ; y = y + 22 ;
CreateControl(70,"","ID_filter_r",x,y,100,18) ; y = y + 20 ;
CreateControl(70,"","ID_filter_g",x,y,100,18) ; y = y + 20 ;
CreateControl(70,"","ID_filter_b",x,y,100,18) ; y = y + 24 ;
CreateControl(20,"明暗","ID_bright",x,y,100,20) ; y = y + 22 ;
CreateControl(70,"","ID_bright_d",x,y,100,18) ; y = y + 24 ;
CreateControl(10+10,"二値化","ID_binari",x,y,100,20) ; y = y + 22 ;
CreateControl(70,"","ID_binari_d",x,y,100,18) ; y = y + 24 ;
CreateControl(10+10,"モノクロ","ID_mono",x,y,100,24) ; y = y + 24 ;
CreateControl(10+10,"輪郭","ID_out",x,y,100,24) ; y = y + 24 ;
CreateControl(10+10,"モザイク","ID_moz",x,y,100,24) ; y = y + 24 ;
fin = 1 ; cam = 2 ; sub = 3 ;
SubScreen(fin,SCR_W,SCR_H) ; // 完成画面
SubScreen(cam,SCR_W,SCR_H) ; // カメラ取得画像
SubScreen(sub,SCR_W,SCR_H) ;
SetTimer(100) ;
}
// カメラ ON/OFF
ID_open_cam
{
if(cam_open == 0){
if(OpenCamera(0,0,0,400,300,cam) == 1){
cam_open = 1 ; return ;
}
}
CloseCamera(0) ; cam_open = 0 ;
}
// 拡大
ID_big
{
big = (big + 1) % 2 ;
SetButtonCheck("ID_big",big) ;
if(big == 1){
x1 = CAMERA_W / 4 ; y1 = CAMERA_H / 4 ; w1 = CAMERA_W / 2 ; h1 = CAMERA_H / 2 ;
}
if(big == 0){
x1 = 0 ; y1 = 0 ; w1 = CAMERA_W ; h1 = CAMERA_H ;
}
}
// 左右反転
ID_r_l
{
if(r_l == 1){
SetButtonCheck("ID_r_l",1) ;
r_l = -1 ; return ;
}
if(r_l == -1){
SetButtonCheck("ID_r_l",0) ;
r_l = 1 ; return ;
}
}
// 上下反転
ID_t_b
{
if(t_b == 1){
SetButtonCheck("ID_t_b",1) ;
t_b = -1 ; return ;
}
if(t_b == -1){
SetButtonCheck("ID_t_b",0) ;
t_b = 1 ; return ;
}
}
// 色反転
ID_rev
{
rev = (rev + 1) % 2 ;
SetButtonCheck("ID_rev",rev) ;
}
// フィルター
ID_filter
{
filter = (filter + 1) % 2 ;
SetButtonCheck("ID_filter",filter) ;
}
ID_filter_r
{
filter_r = GetScrollPos("ID_filter_r") ;
}
ID_filter_g
{
filter_g = GetScrollPos("ID_filter_g") ;
}
ID_filter_b
{
filter_b = GetScrollPos("ID_filter_b") ;
}
// 明暗
ID_bright
{
bright = (bright + 1) % 2 ;
SetButtonCheck("ID_bright",bright) ;
}
ID_bright_d
{
bright_d = GetScrollPos("ID_bright_d") + 50 ;
}
// 二値化
ID_binari
{
binari = (binari + 1) % 2 ;
SetButtonCheck("ID_binari",binari) ;
}
ID_binari_d
{
binari_d = GetScrollPos("ID_binari_d") ;
}
// モノクロ
ID_mono
{
mono = (mono + 1) % 2 ;
SetButtonCheck("ID_mono",mono) ;
}
// 輪郭
ID_out
{
out = (out + 1) % 2 ;
SetButtonCheck("ID_out",out) ;
}
// モザイク
ID_moz
{
moz = (moz + 1) % 2 ;
SetButtonCheck("ID_moz",moz) ;
}