如何统一生成颜色直方图?

时间:2016-07-25 08:19:11

标签: unity3d shader

我有一个单一的texture2d,我想根据每个像素的色调值生成一个颜色直方图。我尝试过使用getPixels,但对于1920x1080的纹理来说,它的速度非常慢。

if (tex == null)
{
    return null;
}
tex = GetComponent<GUITexture>().texture as Texture2D;
Color32[] texColors = tex.GetPixels32();
int total = texColors.Length;

int[] Harray = new int[360];
for (int i = 0; i < total; i++)
{
    float H;
    float S;
    float V;

    Color.RGBToHSV(new Color(texColors[i].r, texColors[i].g, texColors[i].b),out H,out S,out V);
    Harray[(int)H]++;
}


for (int i = 0; i < 360; i++)
{
    PlotManager.Instance.PlotAdd("Hue", Harray[i]);
}

我认为着色器可能会有所帮助,但我没有使用着色器编程的经验。着色器是否可以填充色调发生数组并在保持良好帧速率的同时返回它?

1 个答案:

答案 0 :(得分:0)

Unity商店中的资产使用带有RWStructuredBuffer的计算着色器来实现此目的:https://www.assetstore.unity3d.com/en/#!/content/15699