【发布时间】:2013-03-08 17:52:47
【问题描述】:
我一直在尝试将位图对象转换为 int 矩阵。 我在一张空白的白纸上用油漆画了字母“C”,如果位图对象中的像素在同一位置(x,y),程序应该用“0”初始化arr(x,y)是白色的,如果是黑色像素,则相应地为“1”。
我写了以下代码:
static void Main(string[] args)
{
Bitmap arie = new Bitmap(@"C:\Users\User\Desktop\letter.bmp");
object [,] arr = new object[arie.Width, arie.Height];
int min=1000,counter=1;
for (int i = 0; i < arr.GetLength(0) - 1; i++)
{
for (int j = 0; j < arr.GetLength(1) - 1; j++)
{
if (arie.GetPixel(i, j).ToArgb() == Color.White.ToArgb())
{
arr[i, j] = 0;
}
else
arr[i, j] = 1;
}
}
for (int i = 1; i < arr.GetLength(0) - 2; i++)
{
for (int j = 1; j < arr.GetLength(1) - 2; j++)
{
Console.Write(arr[i, j]);
}
Console.WriteLine();
}
}
最后我画的字母“C”是这样的: http://teachers.web.cern.ch/teachers/archiv/hst2000/teaching/expt/wavesand/image39.gif
似乎有人能认识到这个问题吗?
【问题讨论】:
-
为什么循环条件 arr.GetLength(0) - 2 vs arr.GetLength(0) - 1 的第三个(和第四个)?另外,为什么这些循环从 1 而不是 0 开始(基本上是我意识到的相同问题)
-
我不太确定我是否理解你想要做什么,但你可能想使用 LockBits() 来加快速度:Here's a good example of looping through all of the pixels in a Bitmap