Getting color range of pixel block in video texture in Unity

时间:2017-03-22 18:46:17

标签: c# unity3d unity5

I'm trying to get an average color from a specific 4x4 area in a video texture on every update. It can either be black or white, but because I'm streaming the video and the resolution differs from time to time it might also be grayish. I need to find out more precisely if it's "almost black" or more on the white/light gray side of the spectrum.

I'm very new to c# and unity. I found Texture2D.GetPixel or Texture2D.GetPixels32 might be better, but I'm really not sure how I can do that from a video texture.

Thanks to anyone who can help.

1 个答案:

答案 0 :(得分:1)

查看this帖子。看起来你正在和那个从图像中获取纹理并平均像素的那个人做同样的事情。

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

  

Texture2D.GetPixel或Texture2D.GetPixels32可能会更好,

由于您希望在特定像素上执行此操作,因此您无法使用Texture2D.GetPixelTexture2D.GetPixels32执行此操作。你甚至不需要你正在使用的 UniversalMediaPlayer 插件。

您可以使用GetPixels功能执行此操作。请注意最后的'

这是函数原型:

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

根据您想要从纹理中读取的像素的位置,它应该如下所示:

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

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

注意

如果您喜欢使用Unity的新视频播放器,您仍然可以使用 UniversalMediaPlayer 视频插件。 GetPixels解决方案仍应有效。