C# 将Color32数组转换为字节数组以通过网络发送
我一直致力于Unity3D内Android设备上视频和照片捕获的网络摄像头流媒体。我发现的大多数用于捕获网络摄像头提要的示例都使用特定的WebCamTexture对象来访问设备摄像头硬件。我目前能够捕获摄像头输入,但WebCamTexture将数据存储为Color32[]。我在下面找到了将Color32[]转换为byte[]的解决方案,但它似乎在交换红色和蓝色通道C# 将Color32数组转换为字节数组以通过网络发送,c#,unity3d,image-capture,color-channel,C#,Unity3d,Image Capture,Color Channel,我一直致力于Unity3D内Android设备上视频和照片捕获的网络摄像头流媒体。我发现的大多数用于捕获网络摄像头提要的示例都使用特定的WebCamTexture对象来访问设备摄像头硬件。我目前能够捕获摄像头输入,但WebCamTexture将数据存储为Color32[]。我在下面找到了将Color32[]转换为byte[]的解决方案,但它似乎在交换红色和蓝色通道 有没有办法防止红色和蓝色通道反转?下面是将Color32数组从WebCamTexture转换为字节数组的另一种方法: webcam
有没有办法防止红色和蓝色通道反转?下面是将
Color32
数组从WebCamTexture
转换为字节数组的另一种方法:
webcamTex.GetPixels32(colorArray.colors);
首先,创建一个结构来保存转换后的数组:
[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
,然后再转换为jpeg或png,然后通过网络发送。这将减小图像的大小。有关更多信息,请参阅答案 通过网络发送纹理非常繁重,而且浪费了带宽。为什么不在发送之前将其转换为jpg或png?见帖子。。。。