Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Color32数组转换为字节数组以通过网络发送_C#_Unity3d_Image Capture_Color Channel - Fatal编程技术网

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

C# 将Color32数组转换为字节数组以通过网络发送,c#,unity3d,image-capture,color-channel,C#,Unity3d,Image Capture,Color Channel,我一直致力于Unity3D内Android设备上视频和照片捕获的网络摄像头流媒体。我发现的大多数用于捕获网络摄像头提要的示例都使用特定的WebCamTexture对象来访问设备摄像头硬件。我目前能够捕获摄像头输入,但WebCamTexture将数据存储为Color32[]。我在下面找到了将Color32[]转换为byte[]的解决方案,但它似乎在交换红色和蓝色通道 有没有办法防止红色和蓝色通道反转?下面是将Color32数组从WebCamTexture转换为字节数组的另一种方法: webcam

我一直致力于Unity3D内Android设备上视频和照片捕获的网络摄像头流媒体。我发现的大多数用于捕获网络摄像头提要的示例都使用特定的WebCamTexture对象来访问设备摄像头硬件。我目前能够捕获摄像头输入,但WebCamTexture将数据存储为Color32[]。我在下面找到了将Color32[]转换为byte[]的解决方案,但它似乎在交换红色和蓝色通道


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

下面是将
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
,然后再转换为jpegpng,然后通过网络发送。这将减小图像的大小。有关更多信息,请参阅答案

通过网络发送纹理非常繁重,而且浪费了带宽。为什么不在发送之前将其转换为jpg或png?见帖子。。。。