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;
    }

實現效果:
在這裏插入圖片描述
在不同像素數量的圖片合併下,可能會造成上層圖片的失真現象。
注意,爲了能讀取圖片的像素信息,需要在圖片的Inspector中將Read/Write Enable 開啓。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章