NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# 매크로 만들기 - 이미지 서치 코드.

    페이지 정보

    본문

    매크로 프로그램을 제작할 때 필수로 필요한 기능이 이미지 서치입니다. 아래는 이미지 서치 메소드입니다.

    /// <summary>
    /// 대상 이미지에서 원본 이미지를 찾습니다.
    /// </summary>
    /// <param name="source">찾을 원본 이미지입니다.</param>
    /// <param name="target">원본 이미지를 찾을 대상 이미지입니다. 원본 이미지와 크기가 같거나 커야 합니다.</param>
    /// <param name="tolerance">원본 이미지(Source)와 대상 이미지(Target)를 비교할 공차값입니다. 이 값을 설정하면 비교할 이미지의 컬러값이 다르더라도 True를 반환합니다.</param>
    /// <param name="skipTransparent">이미지의 투명 값을 제외합니다. 투명 값을 제외하면 속도가 향상될 수 있습니다.</param>
    /// <param name="performance">이미지를 비교할 때 성능을 설정합니다. 성능을 최대(0)로 설정하면 속도가 빨라지지만 CPU 사용량이 일시적으로 증가할 수 있습니다. 멀티 환경이라면 CPU 사용량을 적절하게 관리하는게 중요합니다.</param>
    /// <returns>대상 이미지에서 원본 이미지를 찾으면, 찾은 영역을 반환합니다. 만약, 이미지를 못찾으면 빈 영역을 반환합니다.</returns>
    [HandleProcessCorruptedStateExceptions]
    public static Rectangle IsSearch(Image source, Image target, int tolerance, bool skipTransparent, int performance = 0)
    {
        if (NSL.ModuleCheck.Invalid) return Rectangle.Empty;
    
        if (performance > 0)
        {
            _performanceCount = 0;
            _performanceLimit = performance * (int)(Screen.PrimaryScreen.Bounds.Width * Screen.PrimaryScreen.Bounds.Height * 0.1);
            _performanceCheck = true;
        }
        else
        {
            _performanceCount = 0;
            _performanceCheck = false;
        }
    
        if (null == target || null == source)
        {
            return Rectangle.Empty;
        }
    
        try
        {
            if (target.Width < source.Width || target.Height < source.Height)
                return Rectangle.Empty;
    
            var targetArray = GetPixelArray((Bitmap)target);
            var sourceArray = GetPixelArray((Bitmap)source);
    
            if (targetArray.Length == 1 && sourceArray.Length == 1)
            {
                if (ContainSameElements(targetArray[0], 0, sourceArray[0], 0, 1, tolerance, skipTransparent))
                {
                    return new Rectangle(new System.Drawing.Point(0, 0), source.Size);
                }
                return Rectangle.Empty;
            }
    
            foreach (var firstLineMatchPoint in FindMatch(targetArray.Take(target.Height - source.Height), sourceArray[0], tolerance, skipTransparent))
            {
                _performanceCount++;
                if (_performanceCheck && _performanceCount > _performanceLimit)
                {
                    System.Threading.Thread.Sleep(1);
                    _performanceCount = 0;
                }
    
                if (IsSourcePresentAtLocation(targetArray, sourceArray, firstLineMatchPoint, 1, tolerance, skipTransparent))
                {
                    return new Rectangle(firstLineMatchPoint, source.Size);
                }
            }
            return Rectangle.Empty;
        }
        catch (AccessViolationException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

     

    대부분의 매크로 프로그램들이 이미지 서치만 제공하고 있는데요. 엔지엠 매크로는 이미지 체크, 이미지 서치, 이미지 매치를 제공합니다. 이외에도 딥러닝을 이용한 분류와 감지로 이미지를 추적할 수 있습니다. 직접 매크로 프로그램을 제작하려는 분들은 구글에서 검색해보면 많은 내용들이 나올텐데요. 사실, 단편적인 코드보다는 구조적으로 적용하는 방법과 결과를 어떻게 처리해야할지 판단하는게 더 어려울겁니다. 앞으로 여유를 가지고 하나씩 알아가 보도록 할께요~

     

    개발자에게 후원하기

    MGtdv7r.png

     

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

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

    감사합니다~

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

    댓글목록

    등록된 댓글이 없습니다.