Texture2D Color[]转byte[]

颜色转byte数组的算法

byte[] ColorToByte(Color[] colors, int w, int h, float scale)
    {
        var neww = (int)(w * scale);
        var newh = (int)(h * scale);
        var offset = 1 / scale;
        byte[] newdata = new byte[newh * neww * 3 ];
        var ci = 0;
        for (var j = 0; j < newh; j ++)//= offset)
        {
            for (var i = 0; i < neww; i ++)//= offset)
            {
                ci = 3*(i + j * neww);
                var color = colors[(int)(i*offset) + (int)(j *offset)*w];
                
                newdata[ci+0] = (byte)(color.r * 255);
                newdata[ci+1] = (byte)(color.g * 255);
                newdata[ci+2] = (byte)(color.b * 255);
            }
        }
        return newdata;
    }

挺有用的,在这里记录一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来回答你的问题。以下是实现的代码: ```csharp // 定义地图长宽和每个格子的大小 int mapWidth = 100; int mapHeight = 100; int cellSize = 10; // 创建一个 Texture2D Texture2D texture = new Texture2D(mapWidth, mapHeight); // 定义可行走和不可行走的颜色 Color walkableColor = Color.white; Color unwalkableColor = Color.black; // 定义可行走和不可行走的值 byte walkableValue = 1; byte unwalkableValue = 0; // 初始化地图的颜色为不可行走 for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapHeight; y++) { texture.SetPixel(x, y, unwalkableColor); } } // 使用刷笔在 Texture2D 上刷可行走区域和不可行走区域 // 假设可行走区域是从 (10, 10) 到 (30, 30) for (int x = 10; x < 30; x++) { for (int y = 10; y < 30; y++) { texture.SetPixel(x, y, walkableColor); } } // 应用所有更改 texture.Apply(); // 将 Texture2D 转换byte 数组 byte[] mapData = new byte[mapWidth * mapHeight]; for (int x = 0; x < mapWidth; x++) { for (int y = 0; y < mapHeight; y++) { if (texture.GetPixel(x, y) == walkableColor) { mapData[x + y * mapWidth] = walkableValue; } else { mapData[x + y * mapWidth] = unwalkableValue; } } } ``` 以上代码中,我们首先创建了一个指定长宽的 Texture2D,然后将所有的像素点的颜色初始化为不可行走的颜色。接着,我们使用刷笔在 Texture2D 上刷可行走区域和不可行走区域。最后,我们将 Texture2D 转换byte 数组,其中可行走的像素点对应的值为可行走的值,不可行走的像素点对应的值为不可行走的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值