如何将int *(bgr图像)从c ++转换为unity3d纹理图像?

时间:2013-08-18 08:35:46

标签: opencv unity3d

我有一个来自opencv c ++的bgr图像uchar格式。

该函数类似于int * texture(int * data,int width,int height);该函数处理c ++ end中的图像并返回指向数据的指针。如何将Unity中的数据转换为纹理。基本上可以将这些数据作为纹理放置。我不想把它写到文件中。请帮忙。

代码段(我正在使用dll):::

public static WebCamTexture webCamTexture;
 private Color32[] data;
 private int[] imageData;
 private int[] imdat;

void Start () {
....

data = new Color32[webCamTexture.width * webCamTexture.height];
        imageData = new int[data.Length * 3];
}


void Update()
    {

        webCamTexture.GetPixels32(data);

        // Convert the Color32[] in int* and emit it in bgr format 
        for (int i = 0; i < data.Length; ++i)
        {
            imageData[i * 3] = (int)data[i].b;
            imageData[i * 3 + 1] = (int)data[i].g;
            imageData[i * 3 + 2] = (int)data[i].r;
        }

       //this is the function called from dll
       imdat =  texture(imageData, int width, int height); 
}

DLL端看起来像::

char *tmp;

int* texture(int* imageData ,int width ,int height)
{
int n = w * h * 3;
    tmp = new char[n];

    //ImageData inverted here and then passed onto tmp 3 channels image
    for (int i = 0; i < (w*3); ++i)
            for (int j = 0; j < h; ++j)
                tmp[i + j * (w*3)] = (char)imageData[i + (h - j - 1) * (w*3)];

return (int)tmp;

}

2 个答案:

答案 0 :(得分:1)

我不确定你的格式是什么,但是如果你可以将它转换为byte [],你可以使用Texture2D.LoadImage(byte [])将其转换为工作纹理。

答案 1 :(得分:1)

您应该能够通过BitConverter.GetBytes()Texture2D.LoadImage()实现目标。请确保在那里的Unity手册页中特别注意图像格式限制。

不确定你的C ++ land和C#之间的绑定如何着陆,但你应该能够做一些像这样的事情:

/* iImportedTexture = [Your c++ function here]; */

byte[] bImportedTexture = BitConverter.GetBytes(iImportedTexture);

Texture2D importedTexture = Texture2D.LoadImage(bImportedTexture);