2017-07-24 64 views
1

我有一个Texture2D的数组,它由webcamtexture几秒钟填充。这部分工作,所有50左右的框架显示在检查员罚款。setPixels32()统一创建空白纹理

现在我们通过调用.GetPixels32()来修改这些图像以获得每帧的Color32[]。作为一个例子,我们可以尝试将每个通道设置为当前帧与帧之间的每个像素的Math.Max(实质上是“淡化”混合),并用新修改的纹理替换阵列中的纹理。 (这个代码从第二帧开始,问题是不能从数组出界)

Color32[] previousColors = previousFrame.GetPixels32(); 
    Color32[] currentColors = currentFrame.GetPixels32(); 
    Color32[] outColors = new Color32[colors.Length]; 
    int i = 0; 
    while (i < currentColors .Length) 
    { 
     outColors[i].b = Math.Max(previousColors[i].b, currentColors[i].b); 
     outColors[i].r = Math.Max(previousColors[i].r, currentColors[i].r); 
     outColors[i].g = Math.Max(previousColors[i].g, currentColors[i].g); 
    } 
    bufferedPics[frameIndex].SetPixels32(outColors); 
    bufferedPics[frameIndex].Apply(); 

这里的问题出现时:在检查器中,阵列中的帧中的所有现在显示为空白。但点击它们右侧的圆圈,它会显示经过适当修改的减轻框架。试图在其他地方使用这些框架,它们显示出空白和透明。

+0

你能告诉你如何编辑像素吗?也许是一个示例操作(例如将子区域设置为蓝色)。请注意,由于您构建了一个新阵列,因此所有像素都设置为透明黑色。 –

+0

请给出您的问题措辞和格式化一些更多的努力,让其他用户更容易理解您的问题并提供答案。 – Xaser

+0

@Xaser抱歉格式化,这是我在这里提出的第一篇文章。感谢您的修复。 – v8ntage

回答

1

Color32四个通道:红色,绿色,蓝色和阿尔法。默认情况下,alpha是0(意思是透明的)。您必须将Alpha设置为以使图像不透明。

Color32[] previousColors = previousFrame.GetPixels32(); 
Color32[] currentColors = currentFrame.GetPixels32(); 
Color32[] outColors = new Color32[colors.Length]; 
int i = 0; 
while (i < currentColors .Length) 
{ 
    outColors[i].b = Math.Max(previousColors[i].b, currentColors[i].b); 
    outColors[i].r = Math.Max(previousColors[i].r, currentColors[i].r); 
    outColors[i].g = Math.Max(previousColors[i].g, currentColors[i].g); 
    outColors[i].a = 255; // set the alpha channel to opaque 
} 
bufferedPics[frameIndex].SetPixels32(outColors); 
bufferedPics[frameIndex].Apply();
+0

这是正确的答案:)再次感谢 – v8ntage