unity3d调用win32打开对话框

来源:互联网 发布:steam动态桌面软件 编辑:程序博客网 时间:2024/06/01 10:08
//解决unity3D中使用OpenFileDialog报错的问题。实现unity3D打开资源管理器选择本地图片并显示。
<pre name="code" class="html">http://www.cnblogs.com/U-tansuo/archive/2012/07/10/2584447.html
//参考链接:<a target=_blank href="http://www.cnblogs.com/U-tansuo/archive/2012/07/10/2584447.html">http://www.cnblogs.com/U-tansuo/archive/2012/07/10/2584447.html</a>
//方便自己以后参考。
using System.Collections;using System.IO;using UnityEngine;using System;using System.Runtime.InteropServices;[ StructLayout( LayoutKind.Sequential, CharSet=CharSet.Auto )]  public class OpenFileName {    public int      structSize = 0;    public IntPtr   dlgOwner = IntPtr.Zero;     public IntPtr   instance = IntPtr.Zero;    public String   filter = null;    public String   customFilter = null;    public int      maxCustFilter = 0;    public int      filterIndex = 0;    public String   file = null;    public int      maxFile = 0;    public String   fileTitle = null;    public int      maxFileTitle = 0;    public String   initialDir = null;    public String   title = null;       public int      flags = 0;     public short    fileOffset = 0;    public short    fileExtension = 0;    public String   defExt = null;     public IntPtr   custData = IntPtr.Zero;      public IntPtr   hook = IntPtr.Zero;      public String   templateName = null;     public IntPtr   reservedPtr = IntPtr.Zero;     public int      reservedInt = 0;    public int      flagsEx = 0;}public class DllTest{[DllImport("Comdlg32.dll",SetLastError=true,ThrowOnUnmappableChar=true, CharSet = CharSet.Auto)]               public static extern bool GetOpenFileName([ In, Out ] OpenFileName ofn );        public static  bool GetOpenFileName1([ In, Out ] OpenFileName ofn )    {        return GetOpenFileName(ofn);    }}public class LoadTexture : MonoBehaviour{    private Texture2D img = null;// Use this for initializationvoid Start () {   }// Update is called once per framevoid Update () {}    public void a()    {    }    private string path = "";    public void Loadtexture()    {        /*OpenFileDialog od = new OpenFileDialog();        od.Title = "请选择头像图片";        od.Multiselect = false;        od.Filter = "图片文件(*.jpg,*.png)|*.jpg;*.png";        if (od.ShowDialog() == DialogResult.OK)        {            path = UnityEngine.Application.streamingAssetsPath + "Temp/temp.png";            if (File.Exists(path))            {                File.Delete(path);                File.Copy(od.FileName, path);            }            else            {                File.Copy(od.FileName, path);            }            StartCoroutine(GetTexture("file://" + path));        }*/    }    public void Load()    {        OpenFileName ofn = new OpenFileName();        ofn.structSize = Marshal.SizeOf(ofn);        ofn.filter = "All Files\0*.*\0\0";        ofn.file = new string(new char[256]);        ofn.maxFile = ofn.file.Length;        ofn.fileTitle = new string(new char[64]);        ofn.maxFileTitle = ofn.fileTitle.Length;        ofn.initialDir = UnityEngine.Application.dataPath;//默认路径        ofn.title = "Open Project";        ofn.defExt = "JPG";//显示文件的类型        //注意 一下项目不一定要全选 但是0x00000008项不要缺少        ofn.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;//OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST| OFN_ALLOWMULTISELECT|OFN_NOCHANGEDIR        if (DllTest.GetOpenFileName(ofn))        {            StartCoroutine(WaitLoad(ofn.file));//加载图片到panle            Debug.Log("Selected file with full path: {0}" + ofn.file);        }    }    IEnumerator WaitLoad(string fileName)    {        WWW wwwTexture = new WWW("file://" + fileName);        Debug.Log(wwwTexture.url);        yield return wwwTexture;        img = wwwTexture.texture;    }    void OnGUI()    {        if (img != null)        {            GUI.DrawTexture(new Rect(500, 500, img.width, img.height), img);        }    }    IEnumerator GetTexture(string url)    {        WWW www = new WWW(url);        yield return www;        if (www.isDone && www.error == null)        {            img = www.texture;            Debug.Log(img.width + "  " + img.height);            byte[] data = img.EncodeToPNG();            File.WriteAllBytes(path, data);        }    }}

0 0
原创粉丝点击