【原】unity3d实现调色板

本文采用了原始办法,调用win32api,实现画板调用。win32调色板API位于Comdlg32.dll下,以下是实现代码。

放在unity中的plugins文件夹下

using
UnityEngine; using System.Collections; using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)] public class CHOOSECOLOR { public Int32 lStructSize; public Int32 hwndOwner; public Int32 hInstance; public Int32 rgbResult; public IntPtr lpCustColors; public Int32 Flags; public Int32 lCustData; public Int32 lpfnHook; public Int32 lpTemplateName; } public class DllTest { [DllImport("comdlg32.dll",CharSet=CharSet.Auto)] public static extern bool ChooseColorA( CHOOSECOLOR pChoosecolor);//对应的win32API public static bool ChooseColorA1(CHOOSECOLOR pChoosecolor) { return ChooseColorA( pChoosecolor); } }

  

 public struct  Color1
{
 public    float r;
    public float g;
    public float b;
    public float a;
}

if
(GUI.Button(new Rect(150,0,100,35),"OpenColor")) { CHOOSECOLOR choosecolor = new CHOOSECOLOR(); choosecolor.lStructSize = Marshal.SizeOf(choosecolor); choosecolor.hwndOwner =0; choosecolor.rgbResult = 0x808080;//颜色转成int型 choosecolor.lpCustColors = Marshal.AllocCoTaskMem(64); choosecolor.Flags =0x00000002|0x00000001; if( DllTest.ChooseColorA1( choosecolor)) { a=choosecolor.rgbResult;//获取int型颜色值 rgba由这个值组成 colorStr=Convert.ToString(a,16);//十进制转化十六进制 每两个字符代表一个颜色值 顺序从左到右依次为RGB
color.b=Convert.ToInt32(colorStr.Substring(0,2),16)/255f;
color.g=Convert.ToInt32(colorStr.Substring(2,2),16)/255f;
color.r=Convert.ToInt32(colorStr.Substring(4,2),16)/255f; } } GUI.Label(new Rect(0,30,500,30),"aaaa:"+colorStr+":::"+colorStr.Substring(0,2)+" : "+colorStr.Substring(2,2)+" : "+colorStr.Substring(4,2)); GUI.Label(new Rect(0,70,500,30),"aaaa:"+colorStr+":::"+Convert.ToInt32(colorStr.Substring(4,2),16)+":"+Convert.ToInt32(colorStr.Substring(2,2),16)+ ":"+Convert.ToInt32(colorStr.Substring(0,2),16)); plane.renderer.material.color=new Color(color.r,color.g,color.b); }
注意:本文只做了RGB 你们可以补充上A哦,特此提醒,这个程序在unity里面会自动嘣,但是发成exe没事。关于上面win32的对应,可以查询msdn相关文档

实现效果:

posted @ 2012-07-18 22:55  U_探索  阅读(4416)  评论(2编辑  收藏  举报