wp8我可以使用IntPtr来提高图像处理性能

时间:2013-12-15 12:09:52

标签: c# windows-phone-8

我已经启动了一个应用程序,可以通过多个过滤器实时传递手机摄像头图像。

我可以将相机中的数据作为灰度字节数组获取。许多步骤涉及迭代像素并从周围像素获取本地数据并对其进行操作。一切正常,但手机上的表现令人失望。使用高质量的相机,我们可以谈论一个超过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;
}

0 个答案:

没有答案