比较具有不同颜色的位图对象
Comparing Bitmap objects with different colors
我有一个手写调查的位图对象(见下面的调查图片),其中包含各种复选框。我正在使用一种算法将空白、未标记复选框的位图与同一复选框(可能标记也可能未标记)的位图进行比较,以确定该复选框是否已标记。这段代码基本上遍历位图上的每个复选框位置,并使用 bm.GetPixel(x, y).GetBrightness() < 0.5f
逐像素扫描,对复选框进行散列并将其存储在列表中。然后,我会将空白复选框的哈希值与传入复选框的哈希值(具有一定的公差)进行比较,以确定它是否被标记。
现在我的问题是,如果复选框用黑色钢笔标记,这将完美运行。如果使用任何其他颜色的笔(红色、蓝色等)来标记这些复选框,则 bm.GetPixel(x, y).GetBrightness() < 0.5f
将无法识别像素的变化。谁能告诉我可以更改哪些内容以包含其他颜色标记?
foreach (KeyValuePair<string, CheckboxData> element in b1.CheckboxLocations)
{
int startX = element.Value.startX;
int endX = element.Value.endX;
int startY = element.Value.startY;
int endY = element.Value.endY;
List<bool> lResult = new List<bool>();
for (int y = startY; y < endY; y++)
{
for (int x = startX; x < endX; x++)
{
lResult.Add(bm.GetPixel(x, y).GetBrightness() < 0.5f);
}
}
int numMarked = 0;
foreach(bool b in lResult)
{
if(b == true)
{
numMarked++;
}
}
Console.WriteLine($"Box Name: {element.Key}\nNumber of Pixels Marked: {numMarked}\n");
}
尝试查看位图对象的 R、G 和 B 属性。然后,您可以根据唯一的阈值单独检查每种颜色。类似下面的内容可能更有用:
lResult.Add(bm.GetPixel(x, y).R < 128 || bm.GetPixel(x, y).G < 128 || bm.GetPixel(x, y).B < 128);
我有一个手写调查的位图对象(见下面的调查图片),其中包含各种复选框。我正在使用一种算法将空白、未标记复选框的位图与同一复选框(可能标记也可能未标记)的位图进行比较,以确定该复选框是否已标记。这段代码基本上遍历位图上的每个复选框位置,并使用 bm.GetPixel(x, y).GetBrightness() < 0.5f
逐像素扫描,对复选框进行散列并将其存储在列表中。然后,我会将空白复选框的哈希值与传入复选框的哈希值(具有一定的公差)进行比较,以确定它是否被标记。
现在我的问题是,如果复选框用黑色钢笔标记,这将完美运行。如果使用任何其他颜色的笔(红色、蓝色等)来标记这些复选框,则 bm.GetPixel(x, y).GetBrightness() < 0.5f
将无法识别像素的变化。谁能告诉我可以更改哪些内容以包含其他颜色标记?
foreach (KeyValuePair<string, CheckboxData> element in b1.CheckboxLocations)
{
int startX = element.Value.startX;
int endX = element.Value.endX;
int startY = element.Value.startY;
int endY = element.Value.endY;
List<bool> lResult = new List<bool>();
for (int y = startY; y < endY; y++)
{
for (int x = startX; x < endX; x++)
{
lResult.Add(bm.GetPixel(x, y).GetBrightness() < 0.5f);
}
}
int numMarked = 0;
foreach(bool b in lResult)
{
if(b == true)
{
numMarked++;
}
}
Console.WriteLine($"Box Name: {element.Key}\nNumber of Pixels Marked: {numMarked}\n");
}
尝试查看位图对象的 R、G 和 B 属性。然后,您可以根据唯一的阈值单独检查每种颜色。类似下面的内容可能更有用:
lResult.Add(bm.GetPixel(x, y).R < 128 || bm.GetPixel(x, y).G < 128 || bm.GetPixel(x, y).B < 128);