unity 压缩

using System.Collections;

using System.Collections.Generic;

using System.IO;

using System.Threading;

using System.Windows.Forms;

using UnityEditor;

using UnityEngine;

using UnityEngine.UI;

using static house_file_crl.TextureUtility;

public class house_file_crl : MonoBehaviour

{

    public int house_num;

    public bool add_one_more;

    public GameObject btn_delect, btn_reset, btn_details;

    // Start is called before the first frame update

    void Start()

    {

        defaout_action();

    }

    public bool enter_defaut = false;

    void defaout_action()

    {

        enter_defaut = true;

        string path = house_details_crl._instance.get_foder_name() + "/" + house_num;

        if (System.IO.Directory.Exists(path) == true)//如果不存在就创建file文件夹

        {

            house_num_obj.GetComponent<Text>().text = house_num.ToString();

            if (add_one_more)

            {

                GameObject m_Obj = Instantiate(this.gameObject);

                m_Obj.transform.SetParent(transform.parent);

                m_Obj.transform.localScale = Vector3.one;

                m_Obj.GetComponent<house_file_crl>().add_one_more = true;

                m_Obj.GetComponent<house_file_crl>().house_num = house_num+1;

            }

            btn_delect.SetActive(true);

            btn_reset.SetActive(true);

            btn_details.SetActive(true);

            house_num_obj.SetActive(true);

            add_img.SetActive(false);

        }


    }

    public void get_files()  //获取图片入口

    {

        init_file._instance.show_tip();

        string path = house_details_crl._instance.get_foder_name()+"/"+ house_num;

        if (System.IO.Directory.Exists(path) == false)//如果不存在就创建file文件夹

        {

            System.IO.Directory.CreateDirectory(path);

        }

        else

        {

            DeleteFolder(path);

        }


        addhead(path);

    }

    public static void DeleteFolder(string dir)

    {

        foreach (string d in Directory.GetFileSystemEntries(dir))

        {

            if (File.Exists(d))

            {

                FileInfo fi = new FileInfo(d);

                if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)

                    fi.Attributes = FileAttributes.Normal;

                File.Delete(d);//直接删除其中的文件 

            }

            else

            {

                DirectoryInfo d1 = new DirectoryInfo(d);

                if (d1.GetFiles().Length != 0)

                {

                    DeleteFolder(d1.FullName);////递归删除子文件夹

                }

                Directory.Delete(d);

            }

        }

    }

    public GameObject house_num_obj,add_img;

    public void addhead(string s)

    {


        print("path: "+s);

        FolderBrowserDialog dialog = new FolderBrowserDialog();

        dialog.Description = "请选择文件路径";

        if (dialog.ShowDialog() == DialogResult.OK)

        {

            string foldPath = dialog.SelectedPath;

            FolderMove(foldPath, s);

            print(foldPath+" _path: " + s);

            house_num_obj.GetComponent<Text>().text = house_num.ToString();

            if (add_one_more)

            {

                GameObject m_Obj = Instantiate(this.gameObject);

                m_Obj.transform.SetParent(transform.parent);

                m_Obj.transform.localScale = Vector3.one;

                m_Obj.GetComponent<house_file_crl>().add_one_more = true;

                m_Obj.GetComponent<house_file_crl>().house_num = house_num+1;

            }

            btn_delect.SetActive(true);

            btn_reset.SetActive(true);

            btn_details.SetActive(true);

            house_num_obj.SetActive(true);

            add_img.SetActive(false);

            // MessageBox.Show("已选择文件夹:" + foldPath, "选择文件夹提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

    }

    public void FolderMove(string srcFolderPath, string destFolderPath)

    {

        //检查目标目录是否以目标分隔符结束,如果不是则添加之

        if (destFolderPath[destFolderPath.Length - 1] != Path.DirectorySeparatorChar)

            destFolderPath += Path.DirectorySeparatorChar;

        //判断目标目录是否存在,如果不在则创建之

        if (!System.IO.Directory.Exists(destFolderPath))

            System.IO.Directory.CreateDirectory(destFolderPath);

        string[] fileList = System.IO.Directory.GetFileSystemEntries(srcFolderPath);


        foreach (string file in fileList)

        {

            if (System.IO.Directory.Exists(file))

            {

                print("path1: " + file);

                FolderMove(file, destFolderPath + Path.GetFileName(file));

                //Directory.Delete(file);

            }

            else

            {

              //  System.IO.File.Copy(file, destFolderPath + Path.GetFileName(file));

                print(destFolderPath+" **** " + Path.GetFileName(file) + " __path2: " + file);

                if (Path.GetFileName(file).Contains("png"))

                {

                    // GetTexture(file);


                    StartCoroutine(GetTexture(file, destFolderPath + Path.GetFileName(file)));

                }

                else

                {

                    System.IO.File.Copy(file, destFolderPath + Path.GetFileName(file));

                }

            }

        }

        //System.IO.Directory.Delete(srcFolderPath);

    }

    IEnumerator GetTexture(string url,string destFolderPath)

    {

        init_file._instance.show_tip();

        WWW www = new WWW(url);

        yield return www;

        if (www.isDone && www.error == null)

        {

            Texture2D img = www.texture;


            // print("texelSize"+img.texelSize);

            //Sprite sprite = Sprite.Create(img, new Rect(0, 0, img.width, img.height), new Vector2(0.5f, 0.5f));

            Texture2D img1 = ThreadedScale(img, 1820, 750, false);  //  图片压缩

            byte[] date = img1.EncodeToJPG(); //转换格式进一步压缩

            File.WriteAllBytes(destFolderPath, date);

        }

        yield return new WaitForSeconds(2.0f);

        init_file._instance.close_tips();

    }

    public void delect_house_msg()

    {

        string path = house_details_crl._instance.get_foder_name() + "/" + house_num;

      // print(path);

        if (System.IO.Directory.Exists(path))//如果不存在就创建file文件夹

        {

            string path1 = house_details_crl._instance.get_foder_name();

            System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(path1);

            int result = dirInfo.GetDirectories().Length;

            DeleteFolder(path);


            System.IO.Directory.Delete(path);

            for (int i = house_num; i < result+1; i++)

            {

                if (System.IO.Directory.Exists(path1 + "/" + (i + 1)))

                {

                    System.IO.Directory.Move(path1 + "/" + (i+1), path1 + "/" + i);

                    this.transform.parent.transform.GetChild(i).GetComponent<house_file_crl>().house_num=i;

                    this.transform.parent.transform.GetChild(i).GetComponent<house_file_crl>().house_num_obj.GetComponent<Text>().text = i.ToString();

                }

                else

                {

                    this.transform.parent.transform.GetChild(i).GetComponent<house_file_crl>().house_num = i;

                    this.transform.parent.transform.GetChild(i).GetComponent<house_file_crl>().house_num_obj.GetComponent<Text>().text = i.ToString();

                }

            }

            Destroy(this.gameObject);

        }

        else

        {


        }

    }

    private static Color[] texColors;

    private static Color[] newColors;

    private static int w;

    private static float ratioX;

    private static float ratioY;

    private static int w2;

    private static int finishCount;

    private static Mutex mutex;

    private Texture2D ThreadedScale(Texture2D tex, int newWidth, int newHeight, bool useBilinear)

    {

        texColors = tex.GetPixels();

        newColors = new Color[newWidth * newHeight];

        if (useBilinear)

        {

            ratioX = 1.0f / ((float)newWidth / (tex.width - 1));

            ratioY = 1.0f / ((float)newHeight / (tex.height - 1));

        }

        else

        {

            ratioX = ((float)tex.width) / newWidth;

            ratioY = ((float)tex.height) / newHeight;

        }

        w = tex.width;

        w2 = newWidth;

        var cores = Mathf.Min(SystemInfo.processorCount, newHeight);

        var slice = newHeight / cores;

        finishCount = 0;

        if (mutex == null)

        {

            mutex = new Mutex(false);

        }

        if (cores > 1)

        {

            int i = 0;

            ThreadData threadData;

            for (i = 0; i < cores - 1; i++)

            {

                threadData = new ThreadData(slice * i, slice * (i + 1));

                ParameterizedThreadStart ts = useBilinear ? new ParameterizedThreadStart(BilinearScale) : new ParameterizedThreadStart(PointScale);

                Thread thread = new Thread(ts);

                thread.Start(threadData);

            }

            threadData = new ThreadData(slice * i, newHeight);

            if (useBilinear)

            {

                BilinearScale(threadData);

            }

            else

            {

                PointScale(threadData);

            }

            while (finishCount < cores)

            {

                Thread.Sleep(1);

            }

        }

        else

        {

            ThreadData threadData = new ThreadData(0, newHeight);

            if (useBilinear)

            {

                BilinearScale(threadData);

            }

            else

            {

                PointScale(threadData);

            }

        }

        tex.Resize(newWidth, newHeight);

        tex.SetPixels(newColors);

        tex.Apply();

        return tex;

    }

    public class TextureUtility

    {

        public class ThreadData

        {

            public int start;

            public int end;

            public ThreadData(int s, int e)

            {

                start = s;

                end = e;

            }

        }

    }

    public static void BilinearScale(System.Object obj)

    {

        ThreadData threadData = (ThreadData)obj;

        for (var y = threadData.start; y < threadData.end; y++)

        {

            int yFloor = (int)Mathf.Floor(y * ratioY);

            var y1 = yFloor * w;

            var y2 = (yFloor + 1) * w;

            var yw = y * w2;

            for (var x = 0; x < w2; x++)

            {

                int xFloor = (int)Mathf.Floor(x * ratioX);

                var xLerp = x * ratioX - xFloor;

                newColors[yw + x] = ColorLerpUnclamped(ColorLerpUnclamped(texColors[y1 + xFloor], texColors[y1 + xFloor + 1], xLerp),

                ColorLerpUnclamped(texColors[y2 + xFloor], texColors[y2 + xFloor + 1], xLerp),

                y * ratioY - yFloor);

            }

        }

        mutex.WaitOne();

        finishCount++;

        mutex.ReleaseMutex();

    }

    private static Color ColorLerpUnclamped(Color c1, Color c2, float value)

    {

        return new Color(c1.r + (c2.r - c1.r) * value,

        c1.g + (c2.g - c1.g) * value,

        c1.b + (c2.b - c1.b) * value,

        c1.a + (c2.a - c1.a) * value);

    }

    public static void PointScale(System.Object obj)

    {

        ThreadData threadData = (ThreadData)obj;

        for (var y = threadData.start; y < threadData.end; y++)

        {

            var thisY = (int)(ratioY * y) * w;

            var yw = y * w2;

            for (var x = 0; x < w2; x++)

            {

                newColors[yw + x] = texColors[(int)(thisY + ratioX * x)];

            }

        }

        mutex.WaitOne();

        finishCount++;

        mutex.ReleaseMutex();

    }

    public static int GetFilesCount(DirectoryInfo dirInfo)

    {

        int totalFile = 0;

        //totalFile += dirInfo.GetFiles().Length;//获取全部文件

        totalFile += dirInfo.GetFiles("*").Length;//获取某种格式

        foreach (System.IO.DirectoryInfo subdir in dirInfo.GetDirectories())

        {

            totalFile += GetFilesCount(subdir);

        }

        return totalFile;

    }

    // Update is called once per frame

    void Update()

    {

        if (enter_defaut==false)

        {

            defaout_action();

        }

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容