1

我想要做的是循环检查特定颜色的像素并计算它们的图片。这对我的项目至关重要。

所以问题是,即使颜色相同,将 GetPixel 与 Color 进行比较也永远不会返回 true。

我使用单色方形纹理对其进行了测试,并调试记录了 GetPixel 的值,它是:“RGB(0.098,0.451,0.000,1.00)”,这是我正在寻找的颜色,但它仍然返回错误。

我也在 Unity (UnityScript) 中使用 JavaScript,我没有错误。RGB 值是百分比,是的,我启用了纹理读取。

这是代码,请帮助我。

#pragma strict

public static function PixelMagic()
{   
var slika:Texture2D = Resources.Load("backgr",Texture2D);
var pixel_color:Color = new Color(0f,0f,0f,0f);
var green:Color = new Color(0.098f,0.451f,0f,1f);
var hit = 0;

for(var x=0; x<slika.width; x++)
{
    for(var y=0; y<slika.height; y++)
    {
        pixel_color = slika.GetPixel(x,y);

        if(green==pixel_color)
        {
            hit++;
        }
    }   
}
Debug.Log(hit);
Debug.Log(pixel_color);
}
4

1 回答 1

2

我看到 2 个潜在问题:

1 - 您可能有问题,因为它们是两个不同的对象(具有相同的值)。看看这个以了解更多关于 JavaScript 中对象比较的信息。

最快/最简单的解决方法是只比较它们的值而不是颜色。

2 - 你应该确保你从纹理中得到的绿色是“纯的”,也就是说,它是(0.098f,0.451f,0f,1f)而不是(0.09800001f,0.451f,0f,1f)

比较浮点数很危险,例如 1.0f == 10f/10f 可能不会返回 true。您可以使用Unity 的 Mathf.Approximately()进行这些比较。

于 2014-01-29T21:38:12.783 回答