NGMsoftware

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

    NGM 6

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

    커스텀 2부 - 커스텀 모듈로 이미지 서치 액션 만들기.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로에 [ 이미지 서치 ], [ 이미지 매치 ] 액션이 이미 포함되어 있는데요. 엔지엠 매크로에서 기본으로 제공하는 기능에 추가적인 동작이 필요하다면 커스텀 모듈을 만들어서 사용해야 합니다. 커스텀 모듈 제작 방법은 아래 글을 참고하시면 됩니다. 먼저 1부 글을 읽어보세요.

    [ 1부 - 커스텀 모듈로 이미지 서치 액션 만들기 ]

     

    1부 내용을 학습했다는 가정하에 간단하게 중요한 내용들만 설명하면서 넘어가도록 할께요. 빌드 또는 컴파일하는 방법과 배포는 이전 글들을 참고해주세요. Visual Studio Community를 실행하고, 프로젝트를 열어주세요. 여러분들도 아래와 같이 코딩이 되어 있을겁니다.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace CustomImageSearch
    {
        [Serializable]
        public class CustomImageSearchModel : NGM.Models.Interface.BaseCustomConditionToolModel
        {
            public override string DisplayCategory => "조건";
    
            public override string DisplayName => "이미지 서치";
    
            [Category("Data")]
            [DisplayName("판단 결과")]
            [DefaultValue(false)]
            [Browsable(true)]
            public bool Result { get; set; }
    
            [Category("Data")]
            [DisplayName("매치율")]
            [DefaultValue(0)]
            [Browsable(true)]
            public double MatchRate { get; set; } = 0;
    
            public override bool? Execute()
            {
                var rect = NGM.Utility.ImageManager.ImageCondition.IsFind(
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\source.png"),
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\target.png"),
                    out double matchRate
                    );
    
                Result = !rect.IsEmpty;
                MatchRate = matchRate;
                return Result;
            }
        }
    }

     

    이전 학습에서는 바탕화면에 있는 이미지 2장을 비교해서 원하는 이미지가 포함되어 있는지 체크하는 방식으로 이미지를 서치했습니다. 이번에는 찾을 이미지를 윈도우 화면에서 찾는 방법을 알아볼께요. 우선, 윈도우 바탕화면을 캡쳐할 수 있는 코딩이 필요합니다. 아래와 System.Windows.Forms 라이브러리를 참조에 추가하세요.

    LaoniPV.png

     

     

    프라이머리 모니터 크기만한 비트맵 이미지를 하나 만들어줍니다. 만약, 듀얼 모니터라면 세컨더리 모니터 크기를 프라이머리 크기에 더해주면 됩니다.

    ※ 모든 모니터를 캡쳐하려면 PrimaryScreen 대신 AllScreens 속성을 사용하세요.

            public override bool? Execute()
            {
                Bitmap target = new Bitmap(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);

     

    윈도우 화면을 캡쳐하는 코드는 아래와 같습니다. 위에서 만든 Bitmap 이미지에 현재 화면을 캡쳐해서 복사하는 간단한 코드입니다.

                using (Graphics graphics = Graphics.FromImage(target))
                    graphics.CopyFromScreen(0, 0, 0, 0, target.Size);

     

    기존에 target 이미지도 이미 저장된 이미지를 불러왔었는데요. 이제는 화면을 캡쳐한 비트맵 이미지로 변경해줘야 합니다.

                var rect = NGM.Utility.ImageManager.ImageCondition.IsFind(
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\source.png"),
                    target,
                    out double matchRate
                    );

     

    아래는 Execute 메소드의 전체 코드입니다.

            public override bool? Execute()
            {
                Bitmap target = new Bitmap(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height);
    
                using (Graphics graphics = Graphics.FromImage(target))
                    graphics.CopyFromScreen(0, 0, 0, 0, target.Size);
    
                var rect = NGM.Utility.ImageManager.ImageCondition.IsFind(
                    Image.FromFile(@"C:\Users\ngmaster\Desktop\source.png"),
                    target,
                    out double matchRate
                    );
    
                target?.Dispose();
    
                Result = !rect.IsEmpty;
                MatchRate = matchRate;
                return Result;
            }

     

    다 만들어진 코드를 빌드한 후 라이브러리를 커스텀 모듈 폴더에 복사하세요. 그리고, 엔지엠 매크로 에디터를 실행하고, 사용자 도구 상자에서 이미지 서치 액션을 스크립트에 추가하세요. 여러분들도 아래와 같은 화면을 볼 수 있을겁니다.

    QR5JJLH.png

     

     

    찾아야 하는 이미지는 아래와 같습니다.

    J4NZUH8.png

     

     

    그림판에서 이미지를 불러온 후 적당한 위치에 배치하세요.

    ruCJg31.png

     

     

    매크로를 실행하면 윈도우 화면에 찾을 이미지가 있기 때문에 True 결과를 반환합니다. 매치율은 0.999999403953552입니다.

    6WssUxP.png

     

     

    그림판을 닫고, 다시 실행 해보세요. 윈도우 화면에 찾을 이미지가 없기 때문에 결과는 False가 됩니다. 매치율은 0.377793997526169입니다.

    hglLvI7.png

     

     

    이번에는 내가 만든 커스텀 모듈의 로직을 검증하는 방법을 알아볼건데요. Visual Stduio Community를 켜둔 상태에서 아래 그림과 같이 중단점(Break Point)을 설정하세요.

    ※ 프로세스 디버깅은 엔지엠 매크로 엔터프라이즈 우회전용에서만 사용할 수 있습니다.

    JToZeVQ.png

     

     

    비주얼 스튜디오에서 콘트롤+알트+P를 눌러보세요. 그러면 프로세스에 연결창이 표시되는데요. 여기서 엔지엠 매크로 에디터를 선택하세요. Melon.exe를 선택하면 됩니다.

    ※ 프로세스 디버깅은 엔지엠 매크로 엔터프라이즈 우회전용에서만 사용할 수 있습니다.

    CzRMKDf.png

     

     

    연결을 누르면 엔지엠 매크로 에디터에 디버거가 연결됩니다. 에디터에서 실행을 눌러보세요. 중단점이 적중됩니다.

    riXpHDw.png

     

     

    F10을 누르면 한단계씩 코드가 실행됩니다. F11을 누르면 함수 내부로 이동하고 계속해서 디버깅할 수 있습니다. 디버깅 관련된 내용으로 알아야할 내용들이 정말 많은데요. 여기에서 Visual Stduio 관련 강의가 아니기 때문에 간단한 내용만 설명하고 넘어가도록 하겠습니다. 비주얼 스튜디오 관련 궁금한 사항은 홈페이지의 [ 질문과 답변 게시판 ]을 이용 해주세요.

     

    오늘은 여기까지 알아보고, 다음에는 이미지를 찾으면 찾은 이미지를 클릭하도록 개선 해보도록 하겠습니다.

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.