`

【代码片段】取最接近的Web-Safe Color

阅读更多
作者: RayLinn

最近的项目里需要从索引颜色里取最接近的颜色,用下面的代码实现之:

        public static Color ScanNearestColor(Color color)
        {
            int leastDistance = int.MaxValue;
            int red = color.R;
            int green = color.G;
            int blue = color.B;
            byte colorIndex = 255;
            Color[] _colors = GetColorPalette();
            for (int index = 0; index < _colors.Length; index++)
            {
                // Lookup the color from the palette
                Color paletteColor = _colors[index];

                // Compute the distance from our source color to the palette color
                int redDistance = paletteColor.R - red;
                int greenDistance = paletteColor.G - green;
                int blueDistance = paletteColor.B - blue;

                int distance = (redDistance * redDistance) +
                                    (greenDistance * greenDistance) +
                                    (blueDistance * blueDistance);

                // If the color is closer than any other found so far, use it
                if (distance < leastDistance)
                {
                    colorIndex = (byte)index;
                    leastDistance = distance;

                    // And if it's an exact match, exit the loop
                    if (0 == distance)
                        break;
                }
            }
            return _colors[colorIndex];
        }


代码里的GetColorPalette返回索引颜色表,比如下面是生成Web安全色的颜色表:
        private static Color[] GetWebSafeColorPalette()
        {
            Color[] aSafeCols = new Color[216];
            int rValue, gValue, bValue;
            int iPointer = 0;
            for (rValue = 0; rValue <= 255; rValue += 51)
            {
                for (gValue = 0; gValue <= 255; gValue += 51)
                {
                    for (bValue = 0; bValue <= 255; bValue += 51)
                    {
                        aSafeCols[iPointer] = Color.FromRgb((byte)rValue,(byte)gValue,(byte)bValue);
                        iPointer += 1;
                    }
                }
            }


基本最后完成的是个基于Visual studio的CSS编辑器,配上上个项目里为CSS的颜色定义添加相应颜色的下划线,这样的CSS编辑器相当不错了,如果要完美一点,还可以加上图片预览的功能。



参考:
http://msdn.microsoft.com/en-us/library/aa479306.aspx
  • 大小: 241.2 KB
分享到:
评论

相关推荐

    simple-xml-safe-2.7.1-API文档-中文版.zip

    赠送源代码:simple-xml-safe-2.7.1-sources.jar; 赠送Maven依赖信息文件:simple-xml-safe-2.7.1.pom; 包含翻译后的API文档:simple-xml-safe-2.7.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:...

    simple-xml-safe-2.7.1.jar

    simple-xml-safe-2.7.1.jar

    json-stringify-safe, 在循环引用( 如 JSON.stringify ) 上,但不引发.zip

    json-stringify-safe, 在循环引用( 如 JSON.stringify ) 上,但不引发 json-stringify-safe类似 JSON.stringify,但不引发循环引用。用法采用与 JSON.stringify 相同的参数。var stringify = require('json-...

    ANSYS和ANSYS,FE-SAFE软件的工程应用及实例.rar

    ANSYS和ANSYS,FE-SAFE软件的工程应用及实例 很有用的资料值得下载看看

    Node.js-make-promises-safe一个让promises的使用免于内存泄漏的node.js模块

    虽然`make-promises-safe`能够帮助检测和报告未处理的Promise错误,但最好的做法仍然是在代码中尽可能地显式处理Promise的结果。每个Promise都应该有对应的`.then()`和`.catch()`来处理成功和失败的情况。这样不仅能...

    Android代码-gson-type-safe-adapter

    gson-type-safe-adapter A type safe gson adapter. Introduction This library can help mismatch input types keep correct default value, never null. But keep in mind, input JSON should still be legal ...

    kaggle_porto-seguro-safe-driver-prediction.zip

    标题 "kaggle_porto-seguro-safe-driver-prediction.zip" 暗示这是一个关于 Kaggle 数据竞赛的项目,目标是预测porto-seguro公司的保险客户是否为安全驾驶者。Porto Seguro是一家巴西的保险公司,他们提供了大量的...

    simple-xml-safe-2.7.1-API文档-中英对照版.zip

    赠送源代码:simple-xml-safe-2.7.1-sources.jar; 赠送Maven依赖信息文件:simple-xml-safe-2.7.1.pom; 包含翻译后的API文档:simple-xml-safe-2.7.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:...

    qaxbrowser-safe-stable_1.0.1729.5-1_arm64.deb

    奇安信可信浏览器 Deb安装包

    Web Safe Color Pallette

    ### Web安全色盘详解 #### 一、引言 在网页设计中,色彩的应用是非常重要的一个环节。良好的色彩搭配不仅能提升用户体验,还能更好地传达品牌信息。然而,在早期的网络环境中,由于显示技术和设备的限制,并非所有...

    qaxbrowser-safe-stable_1.0.32554.32-1_arm64.deb

    奇安信浏览器 飞腾 银河麒麟版

    fast-safe-stringify, 安全且快速地序列化JavaScript对象.zip

    fast-safe-stringify, 安全且快速地序列化JavaScript对象 fast-safe-stringify安全和快速的序列化替代替代 JSON.stringify 。优雅地处理圆形结构而不是抛出。提供确定的("稳定") 版本,也可以优雅地处理圆形结构。 ...

    PyPI 官网下载 | django-admin-safe-login-0.3.3.tar.gz

    标题中的"PyPI 官网下载 | django-admin-safe-login-0.3.3.tar.gz"表明这是一个在Python的包索引平台PyPI上发布的开源项目,名为`django-admin-safe-login`,版本为0.3.3,且已打包成`.tar.gz`格式。这种格式通常...

    前端开源库-meteor-ejson-safe

    【标题】:Meteor EJSON-Safe 在前端开发中,数据的安全性和完整性是至关重要的,尤其是在实时应用中。Meteor EJSON-Safe是一个针对 Meteor 框架的扩展库,它专注于增强EJSON(Extensible JSON)的安全性。EJSON是...

    Laravel开发-type-safe-collection

    `type-safe-collection`是针对Laravel集合的一个扩展,它为开发者提供了更严谨的类型约束,确保集合中的元素始终保持特定类型,从而提高代码的可读性和安全性。 在传统的Laravel集合中,虽然已经提供了丰富的操作...

    porto-seguro-safe-driver-prediction.zip

    标题 "porto-seguro-safe-driver-prediction.zip" 指的是一个数据压缩包,用于进行 Porto Seguro 的安全驾驶员预测挑战。这个挑战通常涉及到利用机器学习或深度学习技术预测汽车保险客户的理赔风险,以便保险公司能...

    PyPI 官网下载 | drf-safe-jack-4.0.4.tar.gz

    "DRF"是用于构建Web API的流行框架,而"safe-jack"可能是指提供安全功能的一个组件。 描述中提到"资源来自pypi官网",表明这个软件包是通过PyPI,Python的官方包索引进行分发的。PyPI是一个存储库,开发者可以上传...

    react-native-safe-area-context:处理JS中安全区域插图的灵活方法。 也可以在Android和Web上使用!

    npm install react-native-safe-area-context 然后,您需要为所使用的平台链接库的本机部分。 在React Native中链接&gt; = 0.60 使用不再需要链接软件包。 iOS平台: $ npx pod-install 在React Native &lt;0.60中...

    Python库 | decafjoe-safe-0.7.1.tar.gz

    解压后的目录"decafjoe-safe-0.7.1"包含了库的所有源代码和其他相关文件。接着,开发者可以使用Python的setuptools或pip来安装此库,以便在项目中使用。 安装完成后,库中的功能可以按照Python的标准导入方式引入到...

Global site tag (gtag.js) - Google Analytics