본문 바로가기
프로그래밍˙알고리즘/C#ㆍXamarin

[C# Windows] C#으로 픽셀서치 가장쉽게 하기

by 승주니 2021. 10. 24.
반응형

픽셀(pixel)은 디지털 화상을 구성하는 기본적인 단위이다.

어떠한 이미지를 그림판으로 실행하고 최대로 확대를 하면 작은점들이 여러개 보인다.이것들이 모두 픽셀이다.

 

이 글의 내용에서는 픽셀서치와 픽셀서치를 이용하여 이미지서치를 담았다.

 

Visual Studio를 키고 C# 빈프로젝트(.Net) Project에 Class를 두개 생성해준다.

 

구분을 위해 Class1은 MainClass, Class2는 ImgCapture로 변경해준다.

 

[ImgCaputre.cs]
using System.Drawing;

    public class ImgCapture
    {
        private int _refX = 0;
        private int _refY = 0;
        private int _imgW = 0;
        private int _imgH = 0;

        private string filePath = null;

        public ImgCapture(int refX = 0, int refY = 0, int imgW = 0, int imgH = 0)
        {
            _refX = refX;
            _refY = refY;
            _imgW = imgW;
            _imgH = imgH;

        }


        public Bitmap DoCaptureImage()
        {
            Bitmap bitmap = new Bitmap((int)_imgW, (int)_imgH);
            Graphics g = Graphics.FromImage(bitmap);
            g.CopyFromScreen(_refX, _refY, 0, 0, bitmap.Size);
            return bitmap;

        }
    }

-----------------------------------------------------------------------------------------------------------------------------------

[MainClass.cs]
using ImageClass;
using System.Drawing;

    class MainClass
    {
        
        public static void Main()
        {
            Bitmap bmp;
            ImgCapture imgCapture = new ImgCapture(0, 0, 50, 50);
            bmp = new Bitmap(imgCapture.DoCaptureImage());

            for (int i = 0; i < 50; i++)
            {
                for (int j = 0; j < 50; j++)
                {
                    if (Color.FromArgb(255, 224, 0, 0) == bmp.GetPixel(i, j))
                    {
                        Console.WriteLine("지정한 색을 찾았습니다");
                    }
                    else
                    {
                        Console.WriteLine("지정한 색을 찾지 못했습니다");
                    }
                    

                }
            }
        }
    }

ImgCapture로 모니터로 보이는 화면을 캡쳐 한 후에

MainClass의 Pixel비교를 하는 코드이다.

 

MainClass의 11번째줄의 0, 0, 50 ,50은

X, Y, Width, Height이므로 0, 0위치에서 50, 50만큼의 정사각형 모양으로

이미지를 캡쳐하는 것이다.

 

 

2차원그래프를 살펴보면 이해하기 쉽다.

 

구글에 Hex to RGB 또는 RGB to Hex라고 검색하고

변환기를 통해 색값을 MainClass의 18번째줄 if문에 변경하면 된다.

 

ARGB의 A는 픽셀서치에서 특별한경우가

아니라면 255가 고정이다.

반응형

댓글