【发布时间】:2010-10-14 16:35:57
【问题描述】:
我在从图像中获取像素时遇到问题。我加载一个图像,从图像中选择一个像素并检索它的颜色,然后我生成一个矩阵 indexMatrix[bitmap_height][bitmap_width],它包含 1 或 0,具体取决于位图的 [x,y] 颜色是否与选择的颜色。问题是程序没有选择所有像素,尽管它应该。它只检索其中的一部分(我确信“被遗忘”的像素与所选颜色的颜色相同)
奇怪的是,如果我为新图像(由矩阵构造的图像)运行我的程序,它会返回相同的图像(应该如此),但我不知道如何解决这个问题。
请帮忙!!!
问候, 亚历克斯·巴德斯库 以及我项目中的一些代码:
位图声明:
m_Bitmap = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);
这里我计算矩阵:
int bitmapWidth = m_Bitmap.Width;
int bitmapHeight = m_Bitmap.Height;
indexMatrix = new int[bitmapHeight][];
if (imageIsLoaded && colorIsSelected)
{
for (int i = 0; i < bitmapHeight; i++)
{
indexMatrix[i] = new int[bitmapWidth];
for (int j = 0; j < bitmapWidth; j++)
{
Color temp = m_Bitmap.GetPixel(j, i);
if (temp == selectedColor)
indexMatrix[i][j] = 1;
else indexMatrix[i][j] = 0;
}
}
MessageBox.Show("matrix generated succesfully");
}
matrixIsCalculated = true;
}
【问题讨论】:
-
您应该做的第一件事是选择一个您知道错误的像素,让调试器在该点暂停(添加一个 if 语句并中断它) .然后查看
temp与selectedColor相比的值。或者,将indexMatrix转换为单色图像并检查它可能更容易。 -
你怎么知道只检索了一些像素?由于 GetPixel 在逐个像素的基础上运行,您能否判断 GetPixel 是否没有按照您对这些像素的预期工作,或者是否没有为那些“丢失的”像素调用它?乍一看,一切对我来说都很好,除了您可能会考虑将 temp == selectedColor 更改为 temp.Equals(selectedColor) ,因为我想您可以有两种颜色具有相应的 A、R、G、B 值与 == 匹配(我不肯定他们会通过 Equals,但我假设他们会这样做:))