2017-02-01 74 views
0

我需要讀取圖像像素顏色,圖像將只有黑白。因此,如果像素是白色的,我想實例化白色立方體,如果像素是黑色的,我想實例化黑色立方體。現在,這對我來說都是新的,所以我做了一些挖掘,並最終使用了system.Drawing和bitmaps。但現在我堅持。我不知道如何檢查作爲白色像素Unity:讀取圖像像素顏色並基於該圖像實例化對象

例如

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

更好如果u提供一些視覺上的東西來解釋更好! – utkdub

+0

什麼視覺?我只是用空的場景和圖像工作。圖像不會出現在場景中,我只需要加載圖像並閱讀它的像素。圖像將始終爲黑色或白色。所以如果像素是黑色的,我想調試黑色,否則調試白色。那麼基於此我會做我想做的。 – Nanopili

回答

2

如果圖像只有真正的黑色和白色(即所有像素都等於System.Drawing.Color.BlackSystem.Drawing.Color.White),則可以直接與這些顏色進行比較。在您發佈的代碼,它看起來就像這樣:

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

如果圖像是你的統一資產的一部分,更好的辦法是使用資源來閱讀。將圖像放入資源/資源文件夾;那麼你可以使用下面的代碼:

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

如果圖像是全黑或全白了,無需環路 - 只檢查一個像素:

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

是的,我試過這個,但我不斷收到錯誤。它說:ArgumentException:找到空引用或無效值[GDI +狀態:InvalidParameter] – Nanopili

+0

這是如何加載我的圖像:位圖myBitmap =新位圖(「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.Texture2DUnityEngine.Color.GrayScale檢查,如果你出的顏色十分接近白色。