我已经启动了一个应用程序,可以通过多个过滤器实时传递手机摄像头图像。
我可以将相机中的数据作为灰度字节数组获取。许多步骤涉及迭代像素并从周围像素获取本地数据并对其进行操作。一切正常,但手机上的表现令人失望。使用高质量的相机,我们可以谈论一个超过300,000字节(640x480)的阵列。
我不能使用不安全的代码块(Windows Phone不会让你),即指针。 IntPtr有一个Add和Subtract方法,如果我固定源数组并通过移位访问字节信息,我是否还能像指针一样使用它?
我似乎无法找到以这种方式使用它的任何好例子(可能是因为你不应该)并且看到诸如“IntPtr类型用于传递句柄或指针以及用于编组语言的引用”之类的引号支持指针。但它不适用于指针算术。“如果你能使用指针,一切都很好:)
有没有更好的方法来解决这个问题?
//Crude Example - ignore the fact that this would get out of bounds exceptions etc
public byte[] TakeAreaAvg(byte[] sourceArray, int sourceWidth, int sourceHeight)
{
int size = sourceWidth*sourceHeight;
byte[] avgBytes = new byte[size];
for(int i = 0; i < size; i++)
{
avgbytes[i] = (byte)((sourceArray[ i - sourceWidth - 1] +
sourceArray[ i - sourceWidth] +
sourceArray[ i - sourceWidth + 1] +
sourceArray[ i - 1] +
sourceArray[ i ] +
sourceArray[ i + 1] +
sourceArray[ i + sourceWidth - 1] +
sourceArray[ i + sourceWidth] +
sourceArray[ i + sourceWIdth + 1]) / 9);
}
return avgBytes;
}