единство, сравнивающее getpixel с цветом

Что я хочу сделать, так это прокрутить изображение, проверяя пиксели определенного цвета и подсчитывая их. Это критично для моего проекта.

Итак, проблема в том, что сравнение GetPixel с Color никогда не возвращает true, даже если цвета совпадают.

Я протестировал его с одноцветной квадратной текстурой и отладил значение GetPixel, и оно было: «RGB (0,098, 0,451, 0,000, 1,00)», который был цветом, который я искал, но он все равно возвращал false.

Также я использую JavaScript в Unity (UnityScript) и у меня нет ошибок. Значения 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);
}

person user3015088    schedule 29.01.2014    source источник


Ответы (1)


Я вижу 2 возможные проблемы:

1 - У вас, вероятно, проблема, потому что это два разных объекта (с одинаковым значением). Взгляните на здесь, чтобы узнать больше об объектах. сравнение в JavaScript.

Самым быстрым/простым решением было бы просто сравнить их значения вместо цвета.

2 - Вы должны убедиться, что зеленый цвет, который вы получаете от текстуры, является "чистым", то есть это (0.098f,0.451f,0f,1f), а не (0.09800001f,0.451f,0f,1f).

Опасно сравнивать числа с плавающей запятой, например, 1.0f == 10f/10f может не вернуть true. Вы можете использовать Mathf.Approximately() Unity, чтобы сделать эти сравнения.

person Roberto    schedule 29.01.2014
comment
Извините, что так поздно отвечаю, меня не было дома. Вы были правы в том, что цвет нечист. Там было еще около 10 знаков после запятой, о которых я не знал. Так что знайте, что я исправил свою проблему. Спасибо. - person user3015088; 01.02.2014