2017-02-01 18 views
0

Im пытается узнать, сколько пикселей имеет мое изображение. Он работает нормально, но он возвращает неправильный номер пикселя. Изображение имеет 400 пикселей в целом и им только получать 256.Единство: чтение изображений пикселей

private void Pixelreader() 
{ 
    // Load image 
    Texture2D image = (Texture2D)Resources.Load(texture); 
    Debug.Log(image); 

    // Iterate through it's pixels 
    for (int i = 0; i < image.width; i++) 
    { 
     for (int j = 0; j < image.height; j++) 
     { 
      Color pixel = image.GetPixel(i, j); 

      // if it's a white color then just debug... 
      if (pixel == Color.white) 
      { 
       Debug.Log("Im white"); 
      } 
      else 
      { 
       Debug.Log("Im black"); 
      } 
     } 
    } 
} 

он печатает 148 для белого и 108 для черного .. 148 + 108 = 256. Таким образом, Есть много точек отсутствует. Любая идея, почему он не читает полное изображение, которое составляет 400 пикселей?

+0

Где именно он печатает эти цифры? – Abion47

+0

в консоли, я использую debug.log – David

+0

Я имел в виду, где в вашем коде. Из того, что вы опубликовали, все, что вы печатаете, это «Im white» или «Im black», и вы не делаете никаких подсчетов. Итак, откуда ваши цифры? – Abion47

ответ

1

Попробуйте вместо этого:

var whitePixels = 0; 
var blackPixels = 0; 
for (int i = 0; i < image.width; i++) 
    for (int j = 0; j < image.height; j++) 
    { 
     Color pixel = image.GetPixel(i, j); 

     // if it's a white color then just debug... 
     if (pixel == Color.white) 
      whitePixels++; 
     else 
      blackPixels++; 
    } 
Debug.Log(string.Format("White pixels {0}, black pixels {1}", whitePixels, blackPixels)); 

Довольно, что ваши выходные линии просто усекается.

BTW, «GetPixel», как известно, медленный, но это уже другая история.

+0

что я могу использовать вместо GetPixel? – David

+1

'GetPixel' очень медленный для объектов« Bitmap », но мы не имеем дело с' System.Drawing'. Это Unity, а «образ» - это объект Texture2D, а не «Bitmap». – Abion47

+0

Независимо от того, что у вас есть ненужный вызов функции, четыре проверки границ, два умножения и некоторые дополнения - на каждом пикселе. Небрежно подходит для небольших текстур, но просто указывает на это. Вместо этого я бы выбрал GetPixels. –

1

Я думаю, проблема в том, что остальные пиксели не черные или белые, просто небольшой оттенок, который глаз не видит. Попробуйте отладить image.width * image.height, чтобы получить количество пикселей изображения.

EDIT: Возможно, вы должны взглянуть на максимальный размер внутри инспектора изображения. Это может быть заблокирован на 256.

Max size inside inspector of image.

~ Менно

+1

Он проверяет только белый цвет, каждый пиксель (белый или нет) считается черным, так как это просто оператор else. – Equalsk

+0

О, да, полностью игнорировал это. странно. – Mennolp

+0

Где я могу увидеть максимальный размер? – David

 Смежные вопросы

  • Нет связанных вопросов^_^