본문 바로가기

프로그래밍

픽셀 서치 프로그램(Simple Pixel Search)





※ 본 프로그램은 MS VisualStudio 2015, .NET4 기반에서 만들어졌습니다.

 

픽셀 서치 프로그램을 간단히 소개합니다.

 

윈도우 화면에 보이는 일부 영역의 픽셀(Pixel)을 추출하여 빨간 색상의 비율을 퍼센트(%)로 표시해줍니다.

설정한 퍼센트(기본값 30%) 이상이 검색되면 설정한 지연 시간(기본값 2초) 이후에 설정한 영역(X, Y)에 왼쪽 마우스를 클릭하는 프로그램입니다.

 

프로그램을 화면을 소개합니다.

프로그램을 시작하면 아래와 같이 작은 창이 표시됩니다.

 

설정 '>' 버튼을 누르면 아래 그림처럼 여러가지 옵션을 설정할 수 있는 화면이 나타납니다.

 

각 항목에 대한 설명은 다음과 같습니다.

체크(ms) : 추출영역에 대한 픽셀 검색을 하는 주기(ms)를 나타냅니다.

클릭 지연(ms) : 추출영역에서 빨간 색상이 설정한 값(기본값 30%) 이상일 경우 마우스 클릭이 발생하는 지연 시간을 나타냅니다.

X : 마우스 클릭을 하려는 프로세스(윈도우)에 X 좌표를 나타냅니다.

Y : 마우스 클릭을 하려는 프로세스(윈도우)에 Y 좌표를 나타냅니다.

프로세스 : 작업관리자 > 세부 정보에 표시되는 이름(.exe 제외)을 나타냅니다.

제목 : 프로세스에 제목 표시줄에 나타내는 값을 의미합니다.

 

기능을 수행하기 위해서는 먼저 프로세스를 설정해야합니다.

여기서는 그림판(mspaint.exe)을 예시로 설명하겠습니다.

작업관리자를 실행(ctrl+alt+delete 또는 작업표시줄에서 오른쪽 마우스 클릭)하여 그림판의 프로세스 이름(mspaint)을 확인합니다.

 

이름을 확인했으면 프로세스 이름란에 'mspaint'를 입력하고 찾기 버튼을 클릭하여 프로세스의 제목(제목 없음 - 그림판)을 선택합니다.

 

선택을 하면 아래 그림처럼 프로세스란과 제목란에 선택한 값이 표시가됩니다.

 

X, Y값을 지정(200, 300)하고 그림판 빨간 색상을 칠한 후에서 테스트를 한 결과 아래 그림처럼 나타납니다.

200, 300 좌표 지점에 파란색으로 표시된 부분을 확인 할 수 있습니다.

 

 

추출 영역의 빨간색상 비율의 기본값(30%)을 수정하기 위해서는 config 파일을 편집해야 합니다.

아래 그림에서 보이는 PERCENT 항목의 값을 수정하면 됩니다.

 

 

picturebox 영역에서 이미지(bitmap)를 추출는 소스는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CopyFromScreen
(
    PointToScreen
    (
        new Point(this.pictureBox1.Location.X, this.pictureBox1.Location.Y)
    ), new Point(00), pictureBox1.Size
);
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
int color = 0;
int avg = 0;
int count = 0;
 
for (int x = 0; x < bitmap.Width; x++)
{
    for (int y = 0; y < bitmap.Height; y++)
    {
        Color pixelColor = bitmap.GetPixel(x, y);
        if (pixelColor.R > (pixelColor.G + rgbGap) &&
            pixelColor.R > (pixelColor.B + rgbGap))
        {
            color += pixelColor.R;
            count++;
        }
    }
}
 
if (count > 0)
{
    avg = color / (count);
}
int totalPixel = bitmap.Width * bitmap.Height;
int percent = count * 100 / totalPixel;
cs