当前位置:   article > 正文

Unity用代码将多张图片合并为一张图片_unity图片融合

unity图片融合

最近在写一个自己的小项目,在项目中,我想写这么一个地图编辑器:
1.将游戏地图划分一个N个正方形格子
2.地图编辑器有分层功能,类似于PS的图层,在每一个图层上我可以设置指定的图片。
3.根据每个层图片,将其合并为一张图(每张图像素尺寸非固定的)
所以根据以上要求,我创建了如下的编辑器:
在这里插入图片描述
在以上的编辑器中,可以在笔刷面板添加图片,然后在层级面板添加新的层级,用来绘制新的图片。
那核心的问题就是,如何将多张图片合并为一张图片?
我想的方法以下几种方法:
1.使用shader ,但是shader 合并图片的数量有限,在限定最多合并数量的前提下,使用shader是一个不错的选择。
2.使用C# 代码合并,在这个项目,我打算使用这种方式来实现。在不考虑性能前提下,可以支持我将N张图片合并为一张图片。
3.使用PS这一类图片软件,将需要图片进行合并。(但明显不是我需要的)
明确了需求,也有了解决途径,接下里就得需要进行实现。

 public static Texture MergeTex(Texture2D[] texs)
    {
        //图片数量小于1 则 直接返回null
        if (texs.Length < 1) return null;
        //设定第一张图我们将要生成的图片尺寸
        Texture2D nTex = new Texture2D(texs[0].width,texs[0].height, TextureFormat.ARGB32,true);
        Color[] colors = new Color[nTex.width*nTex.height];
        for (int i = 0; i < texs.Length; i++)
        {
            //合并像素数量不相等的情况下 长宽的比例
            float wRate = 1, hRate = 1;
            if (texs[i].width != nTex.width)
                wRate = texs[i].width / (float)nTex.width;
            if (texs[i].height != nTex.height)
                hRate = texs[i].height / (float)nTex.height;
            for (int w = 0; w < nTex.width; w++)
            {
                for (int h = 0; h < nTex.height; h++)
                {
                    //做一个旋转,否则得到图片的朝向不正确
                    Color color = texs[i].GetPixel((int)(h * hRate),(int)((w) * wRate));
                    int index = w * nTex.width + h;
                    if (colors[index] == null) {
                        colors[index] = color;
                        continue;
                    }
                    //如果当前像素的透明为不透名 则直接进行颜色替换
                    if (color.a == 1)
                        colors[index] = color;
                    else //否则将rgb*透明度,进行颜色相加
                        colors[index] = colors[index] + new Color(color.r * color.a, color.g * color.a, color.b * color.a);
                }
            }
        }
        nTex.SetPixels(colors);
        nTex.Apply();
        return nTex;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

实现效果:
在这里插入图片描述
在不同像素数量的图片合并下,可能会造成上层图片的失真现象。
注意,为了能读取图片的像素信息,需要在图片的Inspector中将Read/Write Enable 开启。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/97990
推荐阅读
相关标签
  

闽ICP备14008679号