我正在构建和保存位图,并且我有一个循环将位图中的像素设置为其正确的值。但是,它会在代码中指定的点出现IndexOutOfRange异常之后的短时间内崩溃。Y坐标在循环中超出范围
//data is an array of bytes of size (image width * image height) * 2;
Bitmap b = new Bitmap(width, height, PixelFormat.Format32bppArgb);
for (int i = 0; i < data.Length; i += 2)
{
int luminance = ((int)data[i] << 8) | (int)data[i + 1];
Color c = Color.FromArgb(luminance,luminance,luminance,luminance);
int x = i/2;
int y = x/width;
x %= width;
b.SetPixel(x, y, c);//crashes here when Y is at 513, should only go to 512
}
b.Save(Path.GetFileNameWithoutExtension(fileName) + ".bmp");
我很沮丧,为什么会发生这种情况。为什么会发生这种情况,我该如何解决?
(记OT所有那些reommend不安全的代码:我要一个工作程序,然后一快一我一定会写了,当我开始被检者3点的问题;!))
请添加一行你进入循环之前打印出来data.Length,宽度和高度替代
,并修改问题与这些价值观。我怀疑他们不是你期望他们的。 – 2009-07-28 08:29:56
请注意,“i + 1”是不必要的,顺便说一句 - 我将永远是平均的,因此在将其除以二之前加上一个就不会改变结果。 – 2009-07-28 08:31:35