我一直致力于在 Unity3D 中的 Android 设备上进行网络摄像头流媒体视频和照片捕获。我发现的大多数捕获网络摄像头源的示例都使用特定的 WebCamTexture 对象来访问设备的摄像头硬件。我目前能够捕获相机输入,但 WebCamTexture 将数据存储为 Color32[]。我在下面找到了这个解决方案,用于将 Color32[] 转换为 byte[],但它似乎正在交换红色和蓝色通道。
https://stackoverflow.com/a/21575147/8115962
有没有办法防止红蓝通道颠倒?
这是另一种转换方式Color32
数组来自WebCamTexture
到字节数组:
首先,创建一个结构体来保存转换后的数组:
[StructLayout(LayoutKind.Explicit)]
public struct Color32Array
{
[FieldOffset(0)]
public byte[] byteArray;
[FieldOffset(0)]
public Color32[] colors;
}
The WebCamTexture
转换:
WebCamTexture webcamTex = new WebCamTexture();
创建该结构的新实例:
Color32Array colorArray = new Color32Array();
使用适当的大小初始化 Color32:
colorArray.colors = new Color32[webcamTex.width * webcamTex.height];
Fill Color32
它自动填充字节数组:
webcamTex.GetPixels32(colorArray.colors);
现在,您可以使用colorArray.byteArray
这是字节数组。
如果需要,加载到 2D 纹理中:
Texture2D tex = new Texture2D(2, 2);
tex.LoadRawTextureData(colorArray.byteArray);
tex.Apply();
就像我在我的comment,最好将WebCamTexture
to Texture2D
然后到jpeg or png然后通过网络发送。这将减小图像的大小。看this回答以获取更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)