我正在编写一种迭代图像像素的方法,并返回每列的总和。图像作为指针数组传入,该指针数组被解除引用并求和。奇怪的是,如果我简单地遍历,每个求和列的值返回为255000(它可能是最大值),但是,如果我添加一毫秒的睡眠,则该数组具有正确的非最大值。
private unsafe int[] SumEachColumn(SharedImg camera, Cvb.Image.VPAEntry* pVPAT, IntPtr pbase, int startsumposx =0, int endsumposx = 300)
{
int[] horsum = new int[endsumposx - startsumposx];
byte* pImageLine;
for (int y = 0; y < Image.ImageHeight(camera); y++)
{
pImageLine = (byte*)(pbase.ToInt64() + pVPAT[y].YEntry.ToInt64());
for (int x = startsumposx; x<endsumposx; x++)
{
horsum[x] += (byte)(255 - *(pImageLine + pVPAT[x].XEntry.ToInt64()));
}
//Thread.Sleep(1); //when commented horsum returns 255000 in each cell, when uncommented, returns values ranging from 1500-255000
}
return horsum;
}
我对编程很陌生,对这里可能发生的事情感到十分困惑。不幸的是,这应该是在相机上实时运行,因此每帧暂停一秒不是一个可能的解决方案。