【Unity】贴图主色调及其明度自动计算工具
2016-01-31 22:16
561 查看
前言
来自家装设计师的需求:想知道贴图的主色调和明度。于是用Unity开发了这个小工具。
完整工程场景及代码:参见原文后续评论。
最终效果
左边是算出的主色调,右边是原始贴图
源代码
using UnityEngine; using UnityEngine.UI; using System.Collections; /// <summary> /// 贴图主色调及明度计算工具 /// Created by 杜子兮 2016.1.23 /// duzixi.com All Rights Reserved /// </summary> public class MainColor : MonoBehaviour { public Texture2D img; public RawImage orgTexture; public Image mainColor; public Text colorValue; // 按下空格时开始计算 void Update () { if (Input.GetKeyDown(KeyCode.Space)) { ComputeMainColor(); } } // 计算主色调 void ComputeMainColor() { float r = 0; float g = 0; float b = 0; int width = img.width; int height = img.height; Color[] colors = new Color[width * height]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { colors[i * height + j] = img.GetPixel(i, j); r += colors[i * height + j].r; g += colors[i * height + j].g; b += colors[i * height + j].b; } } r /= width * height; g /= width * height; b /= width * height; // 计算明度 float v = Mathf.Max (Mathf.Max (r, g), b); orgTexture.texture = img; mainColor.color = new Color (r, g, b); colorValue.text = "主色调明度:" + v + " \n 色值:(" + r * 255 + "," + g * 255 + "," + b * 255 + ")"; } }
后语
本来以为O(n*n)复杂度算法略复杂,一开始用的随机采样,但效果并不理想。后来在超哥指点下干脆遍历所有点,结果在PC上就是秒算,效果也很令人满意。
相关文章推荐
- UNITY 5.3.2 更新说明
- UNITY 5.3.2 发行说明 中文版
- Unity3D拖动任意对象GameObject移动到任意地方
- Unity3D小地图制作脚本
- Unity KillCount
- 在Unity中使用Native Plugin(XCode编译)
- Unity3D跟随脚本
- unity, yield return new WaitForSeconds(waitTime) 在 Time.timeScale=0下卡死
- Unity热更新ULua(一)
- 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(54)-工作流设计-所有流程监控
- Unity中的旋转和缩放
- unity, 如果碰撞使用2d物理,为防止颤动,需将更新position的代码写在FixedUpdate里
- Unity和Android互调的基本操作
- Unity里vertexShader里压扁模型来实现比较low的阴影
- Unity初探—SpaceShoot
- Unity3d报奇怪的错误CompareBaseObjectsInternal can only be called from the main thread.
- Unity3d 获取时间戳或获取北京时间
- Unity PlayerPrefs类进行扩展(整个对象进行保存)
- unity3D学习 1
- Unity5 GI与PBS渲染从用法到着色代码