2014-01-29 97 views
1

我想要做的是循环通过图片检查特定颜色的像素并对它们进行计数。这对我的项目来说很难。统一比较getpixel和颜色

所以问题是,即使颜色相同,比较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); 
} 

回答

1

我看到2个潜在的问题:

1 - 你可能有问题,因为他们是两个不同的对象(具有相同的值)。看看at this了解更多关于JavaScript中对象比较的知识。

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

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

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

+0

对不起,这么晚,我不在家。你对色彩的不正确性是正确的。它有10多个小数,我没有意识到。所以知道我解决了我的问题。谢谢。 – user3015088