NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • NGM 5
  • 매뉴얼

    NGM 5의 매뉴얼입니다.

    NGM 5

    NGM 5의 매뉴얼입니다.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    커스텀 [1부] 커스텀 조건 액션 만들기. (나만의 이미지 체크 액션)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘부터 알아볼 내용은 이미지 체크 액션을 커스텀으로 만드는 방법입니다. 이미지를 직접 핸들링해야 해서 내용이 길어질 거 같은데요. 가능하면 2부나 3부로 나눠서 진행하려고 합니다. 이게 글 하나 적는데... 거의 2~4시간 걸리거든요-_-; 돈도 안 되는 일에 너무 열정적인 거 아니냐고 물어보시는 분들이 계시는데요. 뭐 취미 반 기대 반으로 하고 있습니다. 이렇게 하다가 언젠가 기회가 오겠죠^^; 가끔 후원해주시는 분들도 계셔서 잘 포기가 안되네요.

     

    이미지 체크 자체가 조건이라서 액션을 만들 때 BaseCustomConditionToolModel을 상속 받아서 구현해야 합니다. 이전 매뉴얼에서 간단하게 조건 클릭 액션을 만들었죠? 사실 비슷합니다. 다만, NGM에서 제공하고 있는 이미지 유틸리티를 이용해야 한다는 점이 좀 다른 부분이죠. 이미 프로세싱도 간단하게나마 알아보면 좋을듯한데... 이건 개념 잡는 것부터가 넘사벽이라 나중에 자세히 알아보도록 할게요.

     

    어쨌든~ 오늘 알아볼 조건 액션을 배우기 위해 이전에 만든 CustomAction 프로젝트를 실행하고, 새로운 클래스를 추가하세요. 아래 전체 코드를 붙여 넣기 하세요. 17라인과 같이 Attribute를 추가하면 NGM의 이미지 폴더에 접근해서 목록을 가져올 수 있습니다.

    MyImageCheck.cs
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace CustomAction
    {
        [Serializable]
        public class MyImageCheckModel : NGM.Models.Interface.BaseCustomConditionToolModel
        {
            public override string DisplayCategory { get { return "My Condition"; } }
     
            public override string DisplayName { get { return "My Image Check"; } }
     
            [TypeConverter(typeof(NGM.Models.TypeConverter.ImageConverter))]
            public string ImageName { get; set; }
     
     
            public override bool? Execute()
            {
                return null;
            }
        }
    }
    cs
     

     

    아래 그림과 같이 시스템에 있는 이미지 목록을 가져와서 처리할 수 있습니다. 하지만, 이미지 이름만으로 무언가 처리할 수는 없죠? 그래서 이미지의 전체 이름을 찾아서 파일 형태로 만들어야 합니다. 그리고 파일을 역직렬화해서 오브젝트화 시켜야 합니다.

    img.png

     

     

     

    시스템에 저장되어 있는 이미지를 가져올 수 있는지 테스트해볼까요? 아래와 같이 Execute 메서드를 수정하고 버전을 올리세요. 그리고, 빌드하세요. 아래 코드에서 4라인은 자신의 바탕화면 경로로 수정해야 합니다.

    1
    2
    3
    4
    5
    6
    7
            public override bool? Execute()
            {
                Image image = NGM.Models.Interface.SystemHelper.GetImage(this.ImageName);
                image.Save(@"C:\Users\ngmas\Desktop\ngm.png");
                image.Dispose();
                return null;
            }
    cs
     

     

    NGM을 실행한 후 모듈을 추가하세요. 그리고, 스크립트를 추가하고 사용자 도구의 My Image Check를 추가합니다. 실행해보면 아래와 같이 바탕화면에 이미지가 저장되는 것을 알 수 있습니다. 영상이 잘리면 클릭해서 보세요.

    img.gif

     

     

     

    확인이 되었으면, 이제 조건을 체크하기 위한 코드로 변경해보도록 하겠습니다. 기존 Execute 메소드의 내용을 모두 삭제하고 아래 코드로 대체하세요.
    1
    2
    3
    4
    5
    6
    7
    8
            public override bool? Execute()
            {
                NGM.Models.ImageModel model = NGM.Models.Interface.SystemHelper.GetImageModel(this.ImageName);
                Image sourceImage = (Image)model.Image.Clone();
                Image targetImage = NGM.Utility.ScreenCaptureManager.ScreenShot.GetActiveImage(model.ImageRectangle);
     
                return NGM.Utility.ImageManager.ImageCondition.IsCheck(sourceImage, targetImage);
            }
    cs
     

     

    3 라인은 사용자가 선택한 이미지 이름을 NGM의 이미지 오브젝트인 ngi로 가져오는 메서드입니다. SystemHelper 클래스의 GetImage가 아닌 GetImageModel을 사용하면 NGM 내부에서 사용하는 이미지 모델을 가져옵니다. 이미지 체크는 동일한 위치의 동일한 크기를 가진 이미지를 비교합니다. 따라서, 이미지만 있으면 안 되고, 이미지의 위치와 크기도 알아야 하죠. 그렇기 때문에 이미지의 위치와 크기 정보를 가지고 있는 모델을 가져와야 합니다.

     

    4 라인은 원본 이미지를 가져오는 방법을 보여주고 있습니다. 이미지 모델은 캡처한 이미지 원본도 같이 저장하고 있는데요. 비교에 사용할 원본 이미지를 가져온 후 Clone() 메서드를 이용해서 복사합니다. 그리고 5 라인에서 GetActiveImage 메서드로 비교 대상 이미지를 캡처합니다. 어디에서 캡처가 돼야 하는지 알려줘야 하기 때문에 이미지 모델의 ImageRectangle 속성을 인자로 넘겨줘야 합니다.

     

    7 라인은 원본 이미지와 비교 대상 이미지를 인자로 넘겨서 같은 이미지인지 비교하는 메서드입니다. 이 메서드를 통해 이미지 비교를 수행하고 같으면 True, 다르면 False를 반환합니다. 이렇게 하면 간단하게 이미지 비교를 수행할 수 있죠. 물론, 여러 가지 속성들을 더 추가해서 비교 조건을 다양하게 적용시킬 수 있기도 합니다. 2부에서는 이미지 체크를 좀 더 심도 있게 다뤄보도록 하겠습니다.

     

    개발자에게 후원하기

    img.jpg

     

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해 줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.