C#代码:获取与指定颜色相似的.NET自带颜色

今天写了段C#代码,用于解决以下问题:

给定一个颜色,要找到有哪些.NET中自带的颜色与之相似,这里说的.NET自带的颜色,指类似Color.Blue、Color.Black这样的存在于Color结构中的Color类型公开静态属性。比如我要查询的颜色RGB值分别为135、112、155,那么在RGB值各上下浮动30点的范围内,应获得Color.Gray(128,128,128)、Color.LightSlateGray(119,136,153)、Color.SlateGray(112,128,144)三类相似的颜色。

建立一个C#命令行应用程序,手动添加引用System.Drawing用于支持Color类,然后输入如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing; //需要手动添加引用System.Drawing

namespace ColorSearcher
{
    class Program
    {
        static void Main(string[] args)
        {
            int interval = 30; //RGB差异均小于此值的颜色将被判断为相似颜色

            Color colorToSearch = default(Color); //用于存储用户录入的颜色
            bool isInputLegal = false;            //用于校验用户录入结果是否合法

            if (args.Length == 1) //用法1:ColorSearcher HTML颜色代码(如#ABABAB)
            {
                try
                {
                    colorToSearch = ColorTranslator.FromHtml(args[0]);
                    isInputLegal = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            else if (args.Length >= 3) //用法2:ColorSearcher R G B(如 171 171 171)
            {
                try
                {
                    int r = int.Parse(args[0]);
                    int g = int.Parse(args[1]);
                    int b = int.Parse(args[2]);
                    colorToSearch = Color.FromArgb(r, g, b);
                    isInputLegal = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    return;
                }
            }
            
            //非法输入,显示帮助
            if (!isInputLegal)
            {
                Console.WriteLine("用法1:ColorSearcher HTML颜色代码(如#ABABAB)");
                Console.WriteLine("用法2:ColorSearcher R G B(如 171 171 171)");
                return;
            }

            Console.WriteLine("指定颜色");
            Console.WriteLine(colorToSearch);

            //链表:用于存储从Color类中反射出的所有颜色
            LinkedList<Color> colors = new LinkedList<Color>();
            Type t = typeof(System.Drawing.Color);
            System.Reflection.PropertyInfo[] properties = t.GetProperties();
            foreach (System.Reflection.PropertyInfo property in properties)
            {
                if (property.PropertyType.ToString() == "System.Drawing.Color")
                {
                    colors.AddLast((Color)property.GetValue(t, null));
                }
            }

            //查找相似颜色
            Console.WriteLine("相似颜色");
            bool hasFinded = false;
            foreach (Color color in colors)
            {
                if (Math.Abs(colorToSearch.R - color.R) < interval &&
                    Math.Abs(colorToSearch.G - color.G) < interval &&
                    Math.Abs(colorToSearch.B - color.B) < interval)
                {
                    Console.WriteLine(color + String.Format("[{0}, {1}, {2}]", color.R, color.G, color.B));
                    hasFinded = true;
                }
            }
            if (!hasFinded)
            {
                Console.WriteLine("未找到");
            }
        }
    }
}

这段代码有两种用法:

1、用法1:ColorSearcher HTML颜色代码(如#ABABAB)

2、用法2:ColorSearcher R G B(如 171 171 171)

运行效果如下:

END

转载于:https://my.oschina.net/Tsybius2014/blog/745302

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值