【问题标题】:Unity: GetPixels() always results in the colour black across whole imageUnity:GetPixels() 始终导致整个图像的颜色为黑色
【发布时间】:2019-09-30 17:46:56
【问题描述】:

我有一张图片(附加),我将其用作测试。我正在尝试获取并将每个像素的所有颜色存储在一个数组中。

我使用下面的代码来做到这一点;

    Texture2D tex = mapImage.mainTexture as Texture2D;

    int w = tex.width;
    int h = tex.height;
    Vector4[,] vals = new Vector4[w, h];

    Color[] cols = tex.GetPixels();
    for (int y = 0; y < h; y++)
    {
        for (int x = 0; x < w; x++)
        {
            if(cols[y+x] != Color.black)
            {
                Debug.Break();
            }

            vals[x, y] = cols[(y + x)];
        }
    }

其中 mapImage 是一个公共材质变量,我将其拖入预制件的场景中。如您所见,我在那里添加了一个调试测试,以在达到非黑色时暂停编辑器。这永远不会受到打击。

有趣的是,我有另一个脚本运行并告诉我点击位置的颜色值 (GetPixel()) 使用相同的图像。它工作正常(不同的方法,但最终都使用相同的材​​料)

我不知道为什么 GetPixels() 总是变黑?

我也一直在考虑将图像数据加载到字节数组中,然后将值解析为 Vector4,但希望这最终能奏效。

【问题讨论】:

    标签: c# image unity3d image-processing image-manipulation


    【解决方案1】:

    您没有正确索引到 Color 数组。使用您使用的索引y+x,您可以不断检查纹理最低行上的相同值,永远不会超过某个点。

    相反,在计算索引时,您需要将您所在的行乘以行长,然后将其添加到您所在的列中:

    Texture2D tex = mapImage.mainTexture as Texture2D;
    
    int w = tex.width;
    int h = tex.height;
    Vector4[,] vals = new Vector4[w, h];
    
    Color[] cols = tex.GetPixels();
    for (int y = 0; y < h; y++)
    {
        for (int x = 0; x < w; x++)
        {
            int index = y * w + x;
            vals[x, y] = cols[index];
        }
    }
    

    来自GetPixels上的文档:

    返回的数组是一个扁平的 2D 数组,其中像素从左到右、从下到上排列(即一行接一行)。 数组大小是所用 mip 级别的宽乘高。默认 mip 级别为零(基础纹理),在这种情况下,大小就是纹理的大小。一般情况下,mip 级别大小为mipWidth=max(1,width&gt;&gt;miplevel),高度也类似。

    【讨论】:

    • @NeoKuro 如果这成功回答了您的问题,请务必单击此答案旁边的灰色复选标记,将其标记为已接受的答案。它会给我一些分数并帮助其他有类似问题的人找到这个答案!。
    • 谢谢,看来这是个愚蠢的错误……最近身体不太好,谢谢你的帮助^.^
    • 你知道,你根本不需要计算那个指数。这个答案很好地向您展示了如何获取任何 特定 像素的索引,但是当您遍历 all 像素时,您只需将 int index 初始化为 0 在循环之外,并在获取当前像素后用index++ 递增它。这样可以避免对图像中的每个像素执行相对繁重的乘法操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    相关资源
    最近更新 更多