将 Color32 数组转换为字节数组以通过网络发送



我一直在研究网络摄像头流,以便在Unity3D中的Android设备上捕获视频和照片。为了捕获网络摄像头源,我发现的大多数示例都使用特定的WebCamTexture对象来访问设备的相机硬件。我目前能够捕获相机输入,但网络摄像头纹理将数据存储为 Color32[]。我在下面找到了这个解决方案,用于将 Color32[] 转换为字节 [],但它似乎正在交换红色和蓝色通道。

https://stackoverflow.com/a/21575147/8115962

有没有办法防止红色和蓝色通道被反转?

这是另一种将数组Color32WebCamTexture转换为字节数组的方法:

首先,创建一个结构来保存转换后的数组:

[StructLayout(LayoutKind.Explicit)]
public struct Color32Array
{
[FieldOffset(0)]
public byte[] byteArray;
[FieldOffset(0)]
public Color32[] colors;
}

要转换WebCamTexture

WebCamTexture webcamTex = new WebCamTexture();

创建该结构的新实例:

Color32Array colorArray = new Color32Array();

使用适当的大小初始化 Color32:

colorArray.colors = new Color32[webcamTex.width * webcamTex.height];

填充Color32自动填充字节数组:

webcamTex.GetPixels32(colorArray.colors);

现在,您可以使用字节数组colorArray.byteArray

如果需要,加载到纹理 2D 中:

Texture2D tex = new Texture2D(2, 2);
tex.LoadRawTextureData(colorArray.byteArray);
tex.Apply();

就像我在评论中所说的那样,最好将WebCamTexture转换为Texture2D然后转换为jpegpng,然后通过网络发送。这将减小图像的大小。有关详细信息,请参阅此答案。

相关内容

最新更新