2013-08-17 43 views
2

我试图在Unity中使用AForge,并且无法转换输入数据。 我有一个2维数组存储像素值,我需要转换为UnmanagedImage。我想出了以下代码,但我不确定它是否是最有效的方法: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); 
} 

任何帮助表示赞赏!

+0

你能从Unity获得一个合适的位图而不是一个像素数组吗?然后你可以一次性转换它。 –

回答

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库。

0

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

这种方法应该可以在Unity上工作。