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;
}
}
대부분의 매크로 프로그램들이 이미지 서치만 제공하고 있는데요. 엔지엠 매크로는 이미지 체크, 이미지 서치, 이미지 매치를 제공합니다. 이외에도 딥러닝을 이용한 분류와 감지로 이미지를 추적할 수 있습니다. 직접 매크로 프로그램을 제작하려는 분들은 구글에서 검색해보면 많은 내용들이 나올텐데요. 사실, 단편적인 코드보다는 구조적으로 적용하는 방법과 결과를 어떻게 처리해야할지 판단하는게 더 어려울겁니다. 앞으로 여유를 가지고 하나씩 알아가 보도록 할께요~
개발자에게 후원하기
추천, 구독, 홍보 꼭~ 부탁드립니다.
여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~
감사합니다~
추천0 비추천0
- 이전글매크로 프로그램 만들기. (이미지 체크) 21.05.02
- 다음글[Oracle] 테이블 생성 및 프라이머리 키 추가. (Create table and add primary key.) 21.05.02
댓글목록
등록된 댓글이 없습니다.