unity 编辑器扩展 使用shader处理并保存图片

using System;
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.IO;

//typeof(编辑器类名),继承EditorWindow
[CustomEditor(typeof(EditorTest))]
public class EditorTest : EditorWindow
{
    //通过MenuItem按钮来创建这样的一个对话框
    [UnityEditor.MenuItem("Tool/colorToGradient")]
    public static void ConfigDialog()
    {
        //GetWindow创建
        EditorWindow.GetWindow(typeof(EditorTest));
    }
 
    private string _savePath;
    private Texture2D tex;
    private Texture2D texture1;
    
    //对话框中的各种内容通过OnGUI函数来设置
    void OnGUI()
    {
        //Button
        if (GUILayout.Button("select TerrainColor"))
        {
            // // OpenFileDialog dialog = new OpenFileDialog();
            // // dialog.Multiselect = false;//只能选择一个文件
            // // dialog.Title = "请选择图片";
            // // dialog.Filter = "图像文件(*bmp;*.jpg;*.jpeg;*.png;*.tga)|*bmp;*.jpg;*.jpeg;*.png;*.tga";
            // TerrainColorPath= EditorUtility.OpenFilePanel("选择一个图片", "", "tga");
            //
            // if (TerrainColorPath!=null)
            // {
            //     WWW www = new WWW(TerrainColorPath);
            //     texture = www.texture;
            //     Debug.Log("打开图片存为texture");
            // }
        }
        if (GUILayout.Button("generate and save"))
        {
          //  tex.LoadImage(File.ReadAllBytes("Assets/textures/q1.png"));
            tex = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/textures/globalmap.png");
            texture1=AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/textures/grassglobalmap.png");
            _savePath = "";
            _savePath=EditorUtility.SaveFilePanel("保存贴图", Application.dataPath, "gradient", "png");
            if (_savePath!="")
            {
                SaveGradient();
            }
        }
    }

    void SaveGradient()
    {
        RenderTexture rt = RenderImage(tex);
        Texture2D png = new Texture2D(rt.width, rt.height, TextureFormat.RGB24, false);
        png.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
        png.Apply();
        File.WriteAllBytes( _savePath,png.EncodeToPNG());
        AssetDatabase.Refresh();
    }
    private RenderTexture RenderImage(Texture2D source)
    {
        RenderTexture destination=new RenderTexture(source.width, source.height, 0);
        //Shader sd = AssetDatabase.LoadAssetAtPath<Shader>("Assets/shaders/ColorToGradient.shader");
        Shader sd = Shader.Find("Unlit/ColorToGradient");
        Material mt = new Material(sd);
        mt.SetTexture("_MainTex",tex);
        mt.SetTexture("_MainTex1",texture1);
        Graphics.Blit(source, destination, mt);
        return destination;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值