我使用以下代码来浏览BMP的像素
for (int i = 0; i <= Image.Width; i++)
{
for (int j = 0; j <= Image.Height; j++)
{
color = Image.GetPixel(i, j); //get
}
}
但是我得到了一个例外
System.ArgumentOutOfRangeException was unhandled
Message="Parameter must be positive and < Height.\r\nParameter name: y"
Source="System.Drawing"
ParamName="y"
我不知道为什么我得到这个..我使用BMP
具有有效高度和相同代码,硬编码值正常工作
@Odded
否:1显示我需要的内容,并且没有2是你的代码发生了什么?
答案 0 :(得分:5)
你的循环中有一个一个一个错误。
如果图片Height
和Width
为100,要获得“最后”像素,您需要将其称为GetPixel(99,99)
。
for (int i = 0; i < Image.Width; i++)
{
for (int j = 0; j < Image.Height; j++)
{
color = Image.GetPixel(i, j); //get
}
}
答案 1 :(得分:5)
只需更改高度和宽度。这是一个在你自己的代码中看得太远的例子 - 这带回了很多回忆......
for(int i=0;i<BMP.Height;i++)
{
for(int j=0;j<BMP.Width;j++)
{
color = BMP.GetPixel(j,i);
}
}
答案 2 :(得分:3)
交换两个循环。
for(int j=0; j<BMP.Height; j++)
{
for(int i=0; i<BMP.Width; i++)
{
color = BMP.GetPixel(i,j);
}
}
每个人都专注于宽度和高度,这不是解决方案。 GetPixel
有两个参数,x
和y
。 y
坐标必须是外部循环才能获得所需的顺序。
x坐标始终从0
... Width-1
答案 3 :(得分:1)
翻转你的循环。外环应该是高度,内环应该是宽度,如果你想让它像第一张图像一样。
答案 4 :(得分:1)
只需交换宽度和高度:
for(int i=0;i<BMP.Height;i++){
for(int j=0;j<BMP.Width;j++){
color=BMP.GetPixel(j, i);
}
}
我还换了i
和j
,以便GetPixel
正常工作
答案 5 :(得分:1)
让我们简单一点,使用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);
}
}