C# 通过BMP C时出现异常#
我使用下面的代码来遍历BMP的像素,如下所示C# 通过BMP C时出现异常#,c#,C#,我使用下面的代码来遍历BMP的像素,如下所示 for (int i = 0; i <= Image.Width; i++) { for (int j = 0; j <= Image.Height; j++) { color = Image.GetPixel(i, j); //get } } for(int i=0;i循环中存在一个off by one错误 如果图像的高度和宽度为100,要获取“最后一个”像素,需要将其称为
for (int i = 0; i <= Image.Width; i++)
{
for (int j = 0; j <= Image.Height; j++)
{
color = Image.GetPixel(i, j); //get
}
}
for(int i=0;i循环中存在一个off by one错误
如果图像的高度
和宽度
为100,要获取“最后一个”像素,需要将其称为GetPixel(99,99)
for(int i=0;i
只需更改高度和宽度。这是一个在你自己的代码中看得太远的例子-这会让你回忆起太多的记忆
for(int i=0;i<BMP.Height;i++)
{
for(int j=0;j<BMP.Width;j++)
{
color = BMP.GetPixel(j,i);
}
}
for(int i=0;i翻转你的循环。如果你想让它表现得像第一张图像,外循环应该是高度,内循环应该是宽度。只需围绕宽度和高度交换即可:
for(int i=0;i<BMP.Height;i++){
for(int j=0;j<BMP.Width;j++){
color=BMP.GetPixel(j, i);
}
}
for(int i=0;i交换两个循环
for(int j=0; j<BMP.Height; j++)
{
for(int i=0; i<BMP.Width; i++)
{
color = BMP.GetPixel(i,j);
}
}
for(int j=0;j让我们简化这个过程,用x和y代替i和j,这样在笛卡尔坐标系下更容易思考
//For each height, loop through all pixels at that height.
for(int y=0; y < BMP.Height; y++)
{
for(int x=0; x < BMP.Width; x++)
{
color = BMP.GetPixel(x,y);
}
}
//对于每个高度,循环该高度的所有像素。
对于(int y=0;y
我认为你可以把“接受的答案”作为一种激励给新手:-)Oded我有一个小问题…这样像素就不会逐行移动了line@Sudantha-这就是您编写代码的方式。到底是什么问题?@Sudantha-您需要将Image.Width
与Image.Height
切换,反之亦然。这将尝试访问GetPixel(Height-1,Width-1)
,它不存在,将导致异常。我不明白这是如何得到任何赞成票的,不管是多少。@Uw(第一次)反对票来自我,因为你的答案是错误的。我非常支持建设性意见。谢谢你,本,我将编辑我的帖子。嗨,问题还没有解决:-(…同样的事情现在垂直发生,不逐行读取图像。你能再解释一点问题是什么吗?我可以看到你的第一个for循环中没有任何条件。我相信这会引发一个异常。for(x;y;z)
y必须是布尔值BMP。高度
不是。这是正确的答案。大多数其他答案都是错误的,因为GetPixel(i,j)中的i和j必须分别对应于宽度和高度。(只剩下一个输入错误,“是的,是的,有一个拼写错误。你注意到这个问题包含相同的拼写错误吗?你注意到你自己的答案@Bala,包含相同的拼写错误吗?@Ben我注意到了,但我打算删除我的答案,所以我不想修改,但我想指出它。嗨,问题还没有解决:-(…同样的事情现在垂直发生,不逐行读取图像HI问题尚未解决:-(…同样的事情垂直发生现在不逐行阅读图像谢谢Joe只是检查我有另一个问题解决这个问题检查问题的底部如果下面的答案没有帮助,你的问题不够清楚。我感觉你正在将一个图像复制到另一个不同宽度和高度的图像中。如果是这样的话,您的问题中根本不清楚。如果您仍然存在此问题,请首先使用X和Y,而不是I和J(更容易避免垂直和水平之间的混淆),然后检查代码中的所有地方:内部循环始终对应于宽度:for(int X=0;Xfor(int j=0; j<BMP.Height; j++)
{
for(int i=0; i<BMP.Width; i++)
{
color = BMP.GetPixel(i,j);
}
}
//For each height, loop through all pixels at that height.
for(int y=0; y < BMP.Height; y++)
{
for(int x=0; x < BMP.Width; x++)
{
color = BMP.GetPixel(x,y);
}
}