2017-02-01 18 views
0

Мне нужно прочитать пиксельные цвета изображений, изображение будет только черно-белым. Поэтому, если пиксель белый, я хочу создать экземпляр белого куба, и если пиксель черный, я хочу создать экземпляр черного куба. Теперь это для меня все ново, поэтому я сделал кое-что, и я закончил использовать system.Drawing и растровые изображения. Однако теперь я застрял. Я не могу знать, как проверить белый пиксельЕдинство: считывание цвета пикселя изображения и объекта-экземпляра на основе этого

Например

private void Pixelreader() 
{ 
    Bitmap img = new Bitmap(("ImageName.png"); 
    for (int i = 0; i < img.Width; i++) 
    { 
     for (int j = 0; j < img.Height; j++) 
     { 
      System.Drawing.Color pixel = img.GetPixel(i, j); 

      if (pixel == *if image is white) 
      { 
       // instantiate white color. 
      } 
     } 
    } 
} 

есть ли другой способ сделать это? Благодаря!

+0

Лучше, если и при условии, некоторые визуальные вещи, чтобы объяснить лучше ! – utkdub

+0

Какие визуальные эффекты? Я просто работаю с пустой сценой и изображением. Изображение не будет в сцене, мне просто нужно загрузить изображение и прочитать его пиксели. Изображение всегда будет черным или белым. поэтому, если пиксель черный, я хочу отлаживать черный отладочный белый. то на основании этого я сделаю то, что хочу. – Nanopili

ответ

2

Если изображение действительно черно-белое (то есть все пиксели равны System.Drawing.Color.Black или System.Drawing.Color.White), то вы можете сравнить их с этими цветами напрямую. В коде вы в курсе, это будет выглядеть следующим образом:

if (pixel == System.Drawing.Color.White) 
{ 
    //instantiate white color. 
} 

Если изображение является частью ваших активов Unity, лучший подход, чтобы прочитать его, используя ресурсы. Поместите изображение в папку Assets/Resources; то вы можете использовать следующий код:

Texture2D image = (Texture2D)Resources.Load("ImageName.png"); 

Если изображение полностью черное или полностью белое, нет необходимости в цикле - просто проверить один пиксель:

if(image.GetPixel(0,0) == Color.White) 
{ 
    //Instantiate white cube 
} 
else 
{ 
    //Instantiate black cube 
} 
+0

Да, я пробовал это, но я продолжаю получать ошибки. он говорит: ArgumentException: Найдена нулевая ссылка или недопустимое значение [GDI + status: InvalidParameter] – Nanopili

+0

Вот как я загружаю свое изображение: Bitmap myBitmap = new Bitmap («Earth.png»); – Nanopili

+0

@Nanopili, можете ли вы проверить, что ваше растровое изображение найдено и правильно загружается? Имейте в виду, что код, который вы отправили, пытается загрузить изображение с диска (не из активов в проекте Unity) – CoolBots

-1

Звучит так, будто вы немного за бортом, и вместо этого можете использовать функции, уже встроенные в Unity. Попробуйте взглянуть на цвет пикселя во время луча.

if (Physics.Raycast (ray, hit)) { 
    var TextureMap: Texture2D = hit.transform.renderer.material.mainTexture; 
    var pixelUV = hit.textureCoord; 
     pixelUV.x *= TextureMap.width; 
     pixelUV.y *= TextureMap.height; 

     print ("x=" + pixelUV.x + ",y=" + pixelUV.y + " " + TextureMap.GetPixel (pixelUV.x,pixelUV.y)); 

Taken from here

+0

Я действительно не понимаю? как это будет работать? Линейка лучей будет снята с моей камеры по направлению к изображению? Но у меня не будет изображения на сцене, я просто хочу его прочитать и получить его пикселей. – Nanopili

+0

Тогда, наверное, мне не хватает всего в этом упражнении? Где изображение и почему вы читаете его? – Ben

+0

Изображение находится в папке ресурсов Unity, мне просто нужно получить к ней доступ и прочитать его. изображение всегда будет только черно-белым, поэтому на белых пикселах я хочу белый куб, а на черных пикселях я хочу, чтобы черный куб был именно этим. – Nanopili

0

Вы действительно можете загрузить изображение в качестве ресурса в Texture2D, а затем использовать UnityEngine.Texture2D и UnityEngine.Color.GrayScale, чтобы проверить, если цвет вы получаете из достаточно близко к белому.