Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一:读取图像像素_C#_Unity3d_Unity5 - Fatal编程技术网

C# 统一:读取图像像素

C# 统一:读取图像像素,c#,unity3d,unity5,C#,Unity3d,Unity5,我试图读取我的图像有多少像素。它的工作正常,但它返回了一个错误的像素数。这张图片总共有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 <

我试图读取我的图像有多少像素。它的工作正常,但它返回了一个错误的像素数。这张图片总共有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");
            }
        }
    }
}
private void Pixelreader()
{
//加载图像
Texture2D image=(Texture2D)Resources.Load(纹理);
Debug.Log(映像);
//遍历它的像素
对于(int i=0;i

它正在印刷148张白纸和108张黑纸。。148 + 108 = 256. 所以有很多像素丢失了。你知道为什么它不读取400像素的完整图像吗?

我认为问题在于其余像素不是黑色或白色,只是眼睛看不到的一点颜色。 尝试调试image.width*image.height以获取图像的像素计数

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

~Menno

试试这个:

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));
var-whitePixels=0;
var-blackPixels=0;
对于(int i=0;i
非常确定您的输出行正在被截断


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

它到底在哪里打印这些数字?在控制台中,我使用debug.logI表示代码中的位置。从你发布的内容来看,你打印的不是“我是白的”就是“我是黑的”,而且你根本不做任何计数。那么你的数字是从哪里来的呢?很确定你数错了,或者图像的分辨率不是你所相信的。对这段代码的快速测试表明,它在图像的每个像素中循环,没有问题,并且计数正确。调试时,
image.width
image.height
是什么?他只测试像素是否为白色,其他每个像素(白色或非白色)都计为黑色,因为这只是一个else语句。哦,是的,完全忽略了这一点。奇怪。我在哪里可以看到最大尺寸?@Alex添加了屏幕截图。@Alex纹理的宽度和高度通常是2的幂。Unity可能正在自动执行转换。那么我可以用什么来代替GetPixel呢?
GetPixel
对于
Bitmap
对象来说速度非常慢,但我们不处理
System.Drawing
。这是统一的,“图像”是一个
Texture2D
对象,而不是
位图
。无论您有什么不必要的函数调用、四个边界检查、两个乘法和一些加法-在每个像素上。对于小的纹理,只需指出即可。我会选择GetPixels。