본문 바로가기
이미지맥스 그리고 루아(lua)/[응용] GUI

[이미지맥스] GUI 기능을 활용한 간단한 사용/미사용 옵션 만들기

by 위치결정 2022. 2. 6.
반응형

이미지맥스에 GUI 를 생성할수 있는 함수들이 추가되었습니다.

GUI는 사전처리스크립트 (PreScript)에 코드를 작성하여 불러오는 방법으로 사용합니다

 

이를 활용하는 방법은 많지만 가장 간편하게 이용할만한 활용법이 동작중 이미지의 사용/미사용 변경 입니다.

왜냐하면 이미지맥스가 START 되어 동작중에는 이미지의 인식상태를 변경할수가 없으니까요.

이를 GUI를 생성하여 EnableImage() 함수와 함께 활용한다면 동작중에도 이미지의 인식 여부를 간편하게 변경할 수 있습니다.

 

 

1. 메인 GUI 생성

우선 메인 GUI를 생성합니다.

이미지맥스에 생성되는 메인 GUI에는 다이얼로그 윈도우를 생성하는 GUIAddButton() 버튼를 생성합니다.

이때 GUIAddGroup() 으로 그룹을 생성하여 비슷한 기능의 버튼들을 모아두면 조금더 정리된 깔끔한 GUI를 구현할수있습니다.

 

생성한 버튼에는 DiagFolder() 함수를 바인딩하여 별도의 다이얼로그를 켜고 끄는 동작하도록 합니다.

GUIItemShow(ID, true, true) 로 사용하면 버튼을 누를때마다 다이얼로그 윈도우가 온/오프 되는 토글 동작으로 구현됩니다.

-- 다이얼로그 표시 함수
function ShowDiagFolder(id)
    GUIItemShow(win, true, true)
end

-- 메인 GUI 생성
gui1 = '이미지 활성 비활성'
GUIAddTab(gui1)
GUISetCurTab(gui1)

GUIAddGroup(8, 10, 345, 30, '기능을 선택하여주세요.')
GUIAddButton(10, 20, -1, -1, '폴더', 'ShowDiagFolder')

GUIShow()

 

2. 다이얼로그 윈도우 생성

다이얼로그 윈도우에서는 1개의 폴더 'folder' 그리고 2개의 이미지 'circle' 과 'rec' 를 인식 허가, 불가 옵션을 변경할수 있는 기능을 구현 할 것입니다.

그러므로 다이얼로그 내에 3개의 체크박스를 추가합니다.

GUIAddDialog('윈도우이름', 'ini 저장 섹터명', int width, int height)

win = GUIAddDialog('윈도우', 'option', 0, 0)

위와 같이 사용하면 생성된 다이얼로그의 이름은 "윈도우이름", ini 파일내에 [ini 저장섹터명] 내에 변수들의 값이 저장됩니다.

 

그럼 아래와 같이 코드를 작성해봅니다.

-- 폴더 다이얼로그 윈도우 GUI 생성
win = GUIAddDialog('윈도우', 'option', 0, 0)
GUIAddCheck(win, 10, 5, -1, -1, '폴더 전체 인식', 'ToggleFolder', 'check_forder')

GUIAddGroup(win, 8, 50, 345, 30, '체크박스 선택해주세요')
GUIAddCheck(win, 10, 60, -1, -1, '원', 'ToggleCircle', 'check_circle')
GUIAddCheck(win, 50, 60, -1, -1, '사각형', 'ToggleRec', 'check_rec')

 

3. 다이얼로그 체크박스의 기능 함수 생성

체크박스는 누를때마다 지정한 변수의 값이 적용됩니다.

체크가 되면 1, 체크가 꺼지면 0으로 반환됩니다.

 

이를 이용하여 변수 값이 1 이면 EnableImage(true, '이미지') 함수를 이용하여 폴더를 인식하도록,

변수 값이 0 이면 EnableImage(false, '이미지') 함수를 이용하여 폴더를 인식 해제하도록 합니다.

-- 폴더 체크박스 인식상태 변경 함수
function ToggleFolder(id)
    print('check_forder: '..check_forder)
    if check_forder == 1 then
        EnableImage(true, 'folder')
    elseif check_forder == 0 then
        EnableImage(false, 'folder')
    end
end

-- 원 체크박스 인식상태 변경 함수
function ToggleCircle(id)
    print('check_circle: '..check_circle)
    if check_circle == 1 then
        EnableImage(true, 'circle')
    elseif check_circle == 0 then
        EnableImage(false, 'circle')
    end
end

-- 사각형 체크박스 인식상태 변경 함수
function ToggleRec(id)
    print('check_rec: '..check_rec)
    if check_rec == 1 then
        EnableImage(true, 'rec')
    elseif check_rec == 0 then
        EnableImage(false, 'rec')
    end
end

 

이렇게 꾸며주고 PreScript에 코드를 작성하셔서 활용하시면 됩니다.

 

4. 이미지 맥스를 새로 시작한 경우 변수를 읽어 이미지인식상태 반영

GUI에서 사용한 변수들은 모두 이미지맥스 내에 ini 파일에 저장되어 다음번 이미지맥스를 실행할때 그대로 반영되어 따라옵니다.

 

하지만 이미지의 인식여부는 휘발성으로 다시 본래 설정으로 돌아가죠.

이를 해결하기위해 lua 스크립트에서 해당 옵션을 반영하는 스크립트를 추가합니다.

이렇게 액션이미지를 활용하여 매 루프동작 마다 스크립트를 실행하도록 한다면 PreScript에서 작성했던 EnableImage 함수들은 사용하지 않아도 되겠죠.

 

이를 액션전용 이미지에 스크립트를 추가하면 매 루프 동작마다 변수를 체크하여 이미지의 활성 여부를 변경합니다.

-- 폴더 인식 여부 설정
if check_forder == 1 then
    EnableImage(true, 'folder')
elseif check_forder == 0 then
    EnableImage(false, 'folder')
end

-- 원 인식 여부 설정
if check_circle == 1 then
    EnableImage(true, 'circle')
elseif check_circle == 0 then
    EnableImage(false, 'circle')
end

-- 사각형 인식 여부 설정
if check_rec == 1 then
    EnableImage(true, 'rec')
elseif check_rec == 0 then
    EnableImage(false, 'rec')
end

 

< 결과물 >

<PreScript GUI 전체코드 다시 보기>

-- 프로그램 실행시 전처리 스크립트


-- 다이얼로그 표시 함수
function ShowDiagFolder(id)
    GUIItemShow(win, true, true)
end

-- 메인 GUI 생성
gui1 = '이미지 활성 비활성'
GUIAddTab(gui1)
GUISetCurTab(gui1)

GUIAddGroup(8, 10, 345, 30, '기능을 선택하여주세요.')
GUIAddButton(10, 20, -1, -1, '폴더', 'ShowDiagFolder')

GUIShow()



-- 폴더 체크박스 인식상태 변경 함수
function ToggleFolder(id)
    print('check_forder: '..check_forder)
    if check_forder == 1 then
        EnableImage(true, 'folder')
    elseif check_forder == 0 then
        EnableImage(false, 'folder')
    end
end

-- 원 체크박스 인식상태 변경 함수
function ToggleCircle(id)
    print('check_circle: '..check_circle)
    if check_circle == 1 then
        EnableImage(true, 'circle')
    elseif check_circle == 0 then
        EnableImage(false, 'circle')
    end
end

-- 사각형 체크박스 인식상태 변경 함수
function ToggleRec(id)
    print('check_rec: '..check_rec)
    if check_rec == 1 then
        EnableImage(true, 'rec')
    elseif check_rec == 0 then
        EnableImage(false, 'rec')
    end
end

-- 폴더 다이얼로그 윈도우 GUI 생성
win = GUIAddDialog('윈도우', 'option', 0, 0)
print(win)

GUIAddCheck(win, 10, 5, -1, -1, '폴더 전체 인식', 'ToggleFolder', 'check_forder')

GUIAddGroup(win, 8, 50, 345, 30, '체크박스 선택해주세요')
GUIAddCheck(win, 10, 60, -1, -1, '원', 'ToggleCircle', 'check_circle')
GUIAddCheck(win, 50, 60, -1, -1, '사각형', 'ToggleRec', 'check_rec')

-- GUIItemShow(win, true)

 

더욱더 편리해질것 같네요.

반응형

댓글