我想要做的是在图片中循环检查特定颜色的像素并计算它们。这对我的项目很重要。
所以问题是即使颜色相同,将GetPixel与Color相比也不会返回true。
我用单色方块纹理测试它并且我调试了LogP的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);
}
答案 0 :(得分:1)
我发现了两个潜在的问题:
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()进行这些比较。