2

我正在尝试在 Unity 中使用 AForge,但在转换输入数据时遇到了麻烦。我有一个二维数组存储需要转换为 UnmanagedImage 的像素值。我想出了以下代码,但我不确定它是否是最有效的方法:

img =  UnmanagedImage.Create(sizx,sizy, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

for (int i =0;i<sizx;i++)
    for (int j =0;j<sizy;j++){
        int index = i+j*sizx;
        img.SetPixel(i,j, new AForge.Imaging.RGB(t[index].r, t[index].g, t[index].b).Color); 
}

任何帮助表示赞赏!

4

2 回答 2

0

我最终使用了不安全的代码并直接访问了 UnmanagedImage.ImageData :

unsafe
    {
        byte* dst = (byte*)data.Scan0.ToPointer();


        for (int y = 0; y < Height; y++)
        {
            for (int x = 0; x < Width; x++, src++, dst += pixelSize)
            {
                dst[RGB.A] = input[src].A;
                dst[RGB.R] = input[src].R;
                dst[RGB.G] = input[src].G;
                dst[RGB.B] = input[src].B;
            }

            dst += offset;
        }
    }

由于无法在 Unity 中完成,我不得不修改 AForge 库。

于 2013-10-03T20:21:26.913 回答
0

如果您将图像表示为 byte[](其中每个值表示从 0 到 255 的像素颜色值),则可以使用UnmanagedImage.FromByteArray从这些值创建 UnmanagedImage。

此方法应该适用于 Unity。

于 2017-07-08T17:51:22.883 回答