【发布时间】:2023-03-30 15:04:02
【问题描述】:
我正在使用 Unity 4.5,将图像抓取为字节数组(每个字节代表一个通道,每个像素(rgba)占用 4 个字节,并将它们显示在纹理上,将数组转换为 Color32 数组,使用以下循环:
img = new Color32[byteArray.Length / nChannels]; //nChannels being 4
for (int i=0; i< img.Length; i++) {
img[i].r = byteArray[i*nChannels];
img[i].g = byteArray[i*nChannels+1];
img[i].b = byteArray[i*nChannels+2];
img[i].a = byteArray[i*nChannels+3];
}
然后,使用以下方法将其应用于纹理:
tex.SetPixels32(img);
但是,这会显着减慢应用程序的速度(此循环在每一帧上执行),我想知道是否有任何其他方法可以加快复制过程。我发现有些人(Fast copy of Color32[] array to byte[] array)使用Marshal.Copy 函数来执行相反的过程(Color32 到字节数组),但我无法将字节数组复制到Color32 数组。有人知道更快的方法吗?
提前谢谢你!
【问题讨论】:
-
那么你可以让你的 i++, i+=nChannels....
标签: c# arrays unity3d marshalling