在Unity中获取视频纹理中像素块的颜色范围

Getting color range of pixel block in video texture in Unity

我试图在每次更新时从视频纹理中的特定 4x4 区域获取平均颜色。它可以是黑色或白色,但因为我正在播放视频并且分辨率不时不同,它也可能是灰色的。我需要更准确地找出它在光谱的 white/light 灰色一侧是否为 "almost black" 或更多。

我对 c# 和 unity 还很陌生。我发现 Texture2D.GetPixel 或 Texture2D.GetPixels32 可能更好,但我真的不确定如何从视频纹理中做到这一点。

感谢任何能提供帮助的人。

看看 post。看起来您正在做与那个人相同的事情,即从图像中获取纹理并平均像素。

我不认为这是重复的原因是因为您想从特定 (4x4) 区域获取像素而不是纹理的所有像素。

Texture2D.GetPixel or Texture2D.GetPixels32 might be better,

因为您想在特定像素上执行此操作,所以无法使用 Texture2D.GetPixelTexture2D.GetPixels32 执行此操作。您甚至不需要您正在使用的 UniversalMediaPlayer 插件。

您可以使用 GetPixels 函数执行此操作。注意最后的's'

这是函数原型:

Color[] GetPixels(int x, int y, int blockWidth, int blockHeight);

根据您想从纹理中读取的像素位置,它应该看起来像这样:

Color[] texColors = tex.GetPixels(0, 0, 4, 4);

您需要使用它来代替 this 答案中的 Color32[] texColors = tex.GetPixels32();

:

如果您更喜欢 UniversalMediaPlayer 视频插件而不是 Unity 的新 VideoPlayer,您仍然可以使用它。 GetPixels 解决方案应该仍然有效。