setPixels32() 统一创建空白纹理
setPixels32() in unity creates blank textures
我有一个 Texture2D 数组,webcamtexture
会在几秒钟内填充它。那部分工作正常,所有 50 个左右的帧都显示在检查器中。
现在我们通过调用 .GetPixels32()
来修改这些图像,为每一帧获取一个 Color32[]
。例如,我们可以尝试将每个通道设置为当前帧和之前帧之间每个像素的 Math.Max
(本质上是 'lighten' 混合),并用新修改的数组替换纹理质地。 (这段代码从第二帧开始,问题不是数组越界)
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();
这里是问题发生的地方:在检查器中,数组中的帧现在全部显示为空白。但是单击它们右侧的圆圈,它会显示经过适当修改、变亮的框架。尝试在其他地方使用这些框架,它们显示为空白和透明。
Color32
有 四个通道 :红色、绿色、蓝色和 alpha。默认情况下,alpha 为 0
(表示透明)。您必须将 alpha 设置为 255 以使图像不透明。
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);
<b>outColors[i].a = 255; // set the alpha channel to opaque</b>
}
bufferedPics[frameIndex].SetPixels32(outColors);
bufferedPics[frameIndex].Apply();
我有一个 Texture2D 数组,webcamtexture
会在几秒钟内填充它。那部分工作正常,所有 50 个左右的帧都显示在检查器中。
现在我们通过调用 .GetPixels32()
来修改这些图像,为每一帧获取一个 Color32[]
。例如,我们可以尝试将每个通道设置为当前帧和之前帧之间每个像素的 Math.Max
(本质上是 'lighten' 混合),并用新修改的数组替换纹理质地。 (这段代码从第二帧开始,问题不是数组越界)
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();
这里是问题发生的地方:在检查器中,数组中的帧现在全部显示为空白。但是单击它们右侧的圆圈,它会显示经过适当修改、变亮的框架。尝试在其他地方使用这些框架,它们显示为空白和透明。
Color32
有 四个通道 :红色、绿色、蓝色和 alpha。默认情况下,alpha 为 0
(表示透明)。您必须将 alpha 设置为 255 以使图像不透明。
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);
<b>outColors[i].a = 255; // set the alpha channel to opaque</b>
}
bufferedPics[frameIndex].SetPixels32(outColors);
bufferedPics[frameIndex].Apply();