2013-08-17 41 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上工作。