2014-01-27 6 views
0

기본적으로 나는 임의로 생성 된 문자의 이미지를 만드는 코드를 작성했습니다. 줄마다 이미지를 스캔하고 bmp 이미지의 전경 (텍스트) 및 배경 (흰색) 픽셀의 총 수를 읽고 결과를 사용자에게 표시하는 방법에 문제가 있습니다. 비트 맵에 걸쳐 모든 픽셀을 반복하고, 픽셀이 흰색 인 경우, 귀하의 배경 픽셀 카운터를 증가 -C#에서 이미지의 전경과 배경에있는 총 픽셀 수는 어떻게 읽을 수 있습니까?

Image bmp = new Bitmap(100, 100); 
Graphics g = Graphics.FromImage(bmp); 
g.Clear(Color.White); 
g.DrawString(randomString, myFont, new SolidBrush(Color.Black), new PointF(0, 0)); 
pictureBox1.Image = bmp; 
bmp.Save(@"CAPTCHA.bmp", System.Drawing.Imaging.ImageFormat.Bmp); 
+0

어떤 부분에 도움이 필요합니까? 스캐닝? 계산? 픽셀이 배경인지 전경인지 알아 내면 되겠습니까? – Gabe

+0

나는 흰 색이 배경이고 다른 색이 전경이라고 가정하고 있습니다. 나는 이미지를 스캐닝하는 것으로부터 모든 부분을 필요로하고 각 라인의 모든 픽셀을 카운트하고 전체 이미지를 제발. ;) – CowBoy

답변

2

기본 개념은 간단하다 : 여기 내 코드의 일부입니다. 끝나면 총 픽셀 수 (너비 * 높이)를 얻고 배경 픽셀 카운터 값으로 원하는대로 수행 할 수 있습니다.

이 작업을 수행하는 간단한 (매우 느리게) 코드 : 전경과 배경의

var backgroundPixels = 0; 

for (int x = 0; x < bmp.Width; x++) 
    for (int y = 0; y < bmp.Height; y++) 
    if (bmp.GetPixel(x, y) == Color.White) 
     backgroundPixels++; 

개념은 당신의 머리 만이있다. 결과 비트 맵에는 위치와 색상이있는 픽셀 배열 만 있습니다. 당신은 특정 색상 (당신의 경우 흰색)에 특정한 의미를 부여 할 수 있으며 배경을 의미한다고 말할 수 있습니다.

좋은 대안은 투명한 비트 맵을 사용하는 것입니다. 투명 비트 맵은 실제로 배경 투명성이라고 부르는 것에 대해 특별한 의미가 있습니다. 이 경우 색상 이외에도 픽셀에는 투명도 (Color.A)라는 개념이 있으며이를 활용할 수 있습니다. 이 경우 흰색을 사용하는 대신 g.Clear(Color.Transparent);을 사용하고 픽셀을 반복 할 때는 bmp.GetPixel(x, y).A > 0 또는 "this is the background"라는 임계 값을 확인하십시오. 실제 배경을 으로 추가하려면이 비트 맵을 완전히 흰색 인 비트 맵 위에 페인트하여 저장하십시오.

+0

코드를 가져 주셔서 감사합니다. (x, y)는 행의 x 또는 열의 y를 의미합니까? 또는 두 개의 pixles가 동시에 흰색 인 경우 'backgroundPixels'을 1 씩 늘리십시오. – CowBoy

+0

이것은 기본적으로 배경의 총 픽셀 수를 계산하는 것입니다. 동시에 이미지의 문자 (전경)에 대한 총 픽셀을 어떻게 얻을 수 있습니까? – CowBoy

+0

Luaan : "GetPixel"참조 오류로 인해 오류가 발생했습니다. 참조를 포함해야합니까? – CowBoy