2012-05-08 6 views
1

Visual Studio C#에서 색상을 감지 할 수있는 프로그램을 만들고 해당 색상의 픽셀 x, y 좌표를 찾습니다. 나는 연구를 해봤지만, 당신이 이미 좌표를주고, 그것이 색을 감지하고, 그것이 내가 원하는 것을 아니고, 색을주고 싶을 때 좌표를 찾는다는 것을 알 수 있습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사합니다색상의 픽셀 좌표 찾기

+0

어떻게 색상 RGB 또는 색상을 파란색으로 지정 하시겠습니까? –

+0

대부분 RGB 일지 모르지만,이 기능이 무엇인지는 확실하지 않습니다. 그게 내가 원하는 것입니다. – Pugmatt

+2

그 정보는 어디에서 찾을 수 있습니까? 당신은 분명히 모든 x와 y를 반복하여 그들이 당신이 추구하는 색깔을 가지고 있는지 테스트해야합니다. – SimpleVar

답변

0

1) 텍스처를 바이트 배열로로드하십시오. 경우 : 당신의 질감이 2 × 2 크기, 경우 예를 들어, 같은 것을 찾아야한다 (1,0) (222)에서 RGB - - - (0,0) (111)에서 RGB 000 (0에서 RGB를, 1) 333 - RGB에서 (1,1) 000 또는 111은 3 바이트를 의미하며, 각 바이트는 빨간색 또는 녹색 또는 파란색 입니다. 그런 다음 x 및 y를 모두 반복하여 을 반복하고 현재 위치의 색상이 검색 한 색상과 일치하는지 확인할 수 있습니다.

3

이미지를 Bitmap 객체에 공급 한 다음 getPixel (x, y) 메서드를 호출하여 특정 지점에서 픽셀을 가져올 수 있습니다. Bitmap 객체는 이미지의 크기를 가지므로 모든 픽셀 (YIKES!)을 반복하여 원하는 색상과 일치하는지 테스트 할 수 있습니다. getPixel()은 작업 할 수있는 Color 객체를 반환합니다. 여기 내가 아주 빨리 일한 것입니다. pictureBox1은 내 양식의 PictureBox 요소입니다.

Bitmap b = new Bitmap(pictureBox1.Image); 
Color c = b.GetPixel(0,0); 

는 매칭 화소의 검색, n은 화상의 화소 수는 최악의 경우에 O (N) 인 것으로하지만, 기억. 작거나 중간 크기의 사진의 경우 이것은 그리 나쁘지는 않지만 큰 이미지의 경우 프로그램이 멈추는 것을 알 수 있습니다.

+1

성능 향상을 위해 검색을 여러 세그먼트로 나누고 작은 세그먼트를 검색해보십시오. – Reddog

0

이미 알고있는 방법을 사용할 수 있습니다. 모든 좌표에서 모든 픽셀을 확인하여 사용자가 입력 한 색상과 동일한 색상을 찾습니다. 0, 0에서 시작합니다. 픽셀 값이 끝날 때까지 X 값을 증가시킵니다. X 값이 행의 끝에있을 때마다 Y 값을 증가시키고 X를 0으로 재설정합니다. 사용자가 입력 한 색상 값과 동일한 색상 값을 얻으면 마지막으로 사용한 X 및 Y 좌표 일치하는 항목을 찾기 전에 사용자에게 다시 알려줍니다.

3

당신은 kevin628 @ 말을 할 수 있지만, for 문을 추가, 그래서 이런 모든 픽셀을 검색 할 수 있습니다

private void GetPixels() 
    { 
     Bitmap b = new Bitmap(pictureBox1.Image); 

     List<Color> colorList = new List<Color> 
     { 

     }; 

     for (int y = 0; y < b.Height; y++) 
     { 
      for (int x = 0; x < b.Width; x++) 
      { 
       colorList.Add(b.GetPixel(x, y)); 
      } 
     } 
    } 

그런 다음 this image를 사용하여, 당신은 그것을로이 같은 (안 전체이를 얻을 수 이다 ~ 50000 라인)

색상 [A = 255, = 240 R = 247, G, B = 136]
색상 [A = 255, = 247 R = 252, G = 155 B]
[A = 255, R = 242, G = 238, B = 164]
색상 [A = 255, R = 79, G = 124, B = 103]
색상 [A = 255, R = 79, G = 124, B = 103]
색상 [A = 255, R = 0 , G = 42, B = 17]
색상 [A = 255, R = 16, G = 104, B = 90]
색상 [A = 255, R = 15, G = 114, B = 109]
색상 [A = 255, R = 33, G = 125, B = 124]
색상 [A = 255, R = 11, G = 83, B = 80]
색상 [A = 255, R = 36 A = 255, R = 90, G = 70, B = 59]
색상 [A = 255, R = 147, G = 109 B = 88]
[A = 255, R = 252, G = 204, B = 164]
[A = 255, R = 220, G = 175, B = 134]
색상 [A [A = 255, R = 126, G = 104, B = 91]
[A = 255, R = 108, G = 94, A = 255, R = 219, G = 187, B = 162] , B는 = 93]
색상 [A = 255, R = 241, G = 235, B = 239]
색상 [A = 255, R = 139, G = 137, B = 142]
색상 [A G = 172, B = 187]
색상 [A = 255, R = 17, G = 62, , B = 85]
[A = 255, R = 33, G = 116, B = 146]
색상 [A = 255, R = 5,] [A = 255, R = 40, G = 106, B = 138] G = 96, B = 117]
색상 [A = 255, R = 0, G = 79, B = 84]
색상 [A = 255, R = 6, G = 94, B = 80]
색상 [A = 255, R = 27, G = 114, B = 98]
색상 [A = 255, R = 40, G = 130, B = 131]
색상 [A = 255, R = 19 G = 116, B = 125]
색상 [A = 255, R = 21, G = 128, B = 134]
색상 [A = 255, R = 5, G = 119, B = 120]
[A = 255, R = 8, G = 120, B = 121][A = 255, R = 46, G = 113, B = 106]
[A = 255, R = 11, G = 107, B = 105] 21, G는 = 70, B = 49]
색상 [A = 255, R = 45, G = 123, B = 99]

이어서

색상을 테스트하기 위해, 단지 같은 것을 수행

for (int i = 0; i < colorList.Count; i++) 
{ 
    Color c = Color.Black; 

    if (c == colorList[i]) 
    { 
     //do something 
    } 
}