如何读取C#中图像前景和背景的像素总数?

如何读取C#中图像前景和背景的像素总数?,c#,image,graphic,C#,Image,Graphic,基本上我已经写了一个代码来创建一个字符的图像(随机生成)。我有一个问题,如何逐行扫描图像,读取我的bmp图像中前景(文本)和背景(白色)像素的总数,并将结果显示给用户。以下是我的部分代码: Image bmp = new Bitmap(100, 100); Graphics g = Graphics.FromImage(bmp); g.Clear(Color.White); g.DrawString(randomString, myFont, new SolidBrush(Color.Black

基本上我已经写了一个代码来创建一个字符的图像(随机生成)。我有一个问题,如何逐行扫描图像,读取我的bmp图像中前景(文本)和背景(白色)像素的总数,并将结果显示给用户。以下是我的部分代码:

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);

基本思想很简单-迭代位图中的所有像素,如果像素为白色,则增加背景像素计数器。完成后,您可以简单地获得像素总数(宽度*高度),并使用背景像素计数器值执行任何操作

一个简单(且速度非常慢)的代码段,用于执行以下操作:

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++;
var backgroundPixels=0;
对于(int x=0;x
前景和背景的概念只存在于你的脑海中。生成的位图只有一组像素,每个像素都有一个位置和颜色。你可以给某种颜色赋予一个特定的含义(在你的例子中是白色),并说它意味着背景——但仅此而已


一个很好的替代方法是使用透明位图,在这里,您所谓的背景透明度确实有一个特殊的含义。在这种情况下,除了颜色之外,像素还有透明度的概念(
Color.a
),您可以利用它。在这种情况下,您需要执行
g.Clear(Color.Transparent)而不是使用白色,当在像素上迭代时,您应该检查
bmp.GetPixel(x,y).A>0
或任何表示“这是背景”的阈值。当您想要添加实际的背景色时,您需要在完全白色的位图上绘制此位图并保存该位图。

您需要哪部分的帮助?扫描?数数?确定一个像素是背景还是前景?我假设白色是背景,其他颜色是前景。我需要扫描图像的所有部分,并计算每行和整个图像中的所有像素谢谢你的密码。(x,y)是指行中的x或列中的y?或者说,如果两个像素同时为白色,则将“背景像素”增加1?这基本上是对背景中的总像素进行计数,我应该如何同时获得图像(我的前景)中角色的总像素?Luaan:这给了我“GetPixel”引用错误的错误。我应该包括任何参考吗?@CowBoy如果你想知道每行的像素数量,请为每行设置一个不同的计数器(即,获取一些数组并根据
y
)进行计数)。字符的总像素为
totalPixelsInImage-totalPixelsInBackground