【问题标题】:unity: read image pixelsunity:读取图像像素
【发布时间】:2017-02-01 21:22:01
【问题描述】:

我正在尝试读取我的图像有多少像素。它工作正常,但是它返回了错误的像素数。图像总共有 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 像素的完整图像吗?

【问题讨论】:

  • 究竟是在哪里打印这些数字?
  • 在控制台中,我使用的是 debug.log
  • 我的意思是在你的代码中。根据您发布的内容,您打印的所有内容都是“我是白人”或“我是黑人”,而且您没有进行任何计数。那么你的数字是从哪里来的呢?
  • 很确定你数错了,或者图像不是你认为的分辨率。对此代码的快速测试表明它循环遍历图像的每个像素,没有问题并且计数正确。
  • 调试时image.widthimage.height是什么?

标签: c# unity3d unity5


【解决方案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));

很确定您的输出行只是被截断了。

顺便说一句,“GetPixel”是出了名的慢,但那是另一回事了。

【讨论】:

  • 那我可以用什么来代替 GetPixel 呢?
  • GetPixel 对于Bitmap 对象来说非常慢,但我们不处理System.Drawing。这是 Unity,“图像”是 Texture2D 对象,而不是 Bitmap
  • 不管你有什么不必要的函数调用,四个边界检查,两个乘法和一些加法 - 在每个像素上。对于小纹理可以忽略不计,但只是指出它。我会选择 GetPixels。
【解决方案2】:

我认为问题在于其余的像素不是黑色或白色,只是眼睛看不到的小色调。 尝试调试 image.width * image.height 得到图像的像素数。

编辑:您可能应该看看图像检查器内的最大尺寸。它可能被锁定在 256。

~门诺

【讨论】:

  • 他只测试像素是否为白色,其他所有像素(无论是否为白色)都算作黑色,因为它只是一个 else 语句。
  • 哦,是的,完全忽略了这一点。很奇怪。
  • 在哪里可以看到最大尺寸?
  • @Alex 添加了截图。
  • @Alex 纹理的宽度和高度是 2 的幂是一般规则。Unity 可能会自动执行转换。
猜你喜欢
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2017-06-17
  • 2013-05-07
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多