//
// カメラサンプル
// 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) ;
}