原文:2019-11-29-win10-uwp-颜色转换

title author date CreateTime categories
win10 uwp 颜色转换
lindexi
2019-11-29 10:18:27 +0800
2018-2-13 17:23:3 +0800
Win10 UWP

本文告诉大家如何从字符串转颜色,从颜色转字符串

字符串转颜色

在 WPF 可以使用下面的代码把十六进制的颜色字符串转颜色

            Color color = (Color) ColorConverter.ConvertFromString("#FFDFD991");
string hex = "#FFFFFF";
Color color = System.Drawing.ColorTranslator.FromHtml(hex);

但是 UWP 没这个方法,所以需要自己写一个方法

        public SolidColorBrush GetSolidColorBrush(string hex)
{
hex = hex.Replace("#", string.Empty);
byte a = (byte) (Convert.ToUInt32(hex.Substring(0, 2), 16));
byte r = (byte) (Convert.ToUInt32(hex.Substring(2, 2), 16));
byte g = (byte) (Convert.ToUInt32(hex.Substring(4, 2), 16));
byte b = (byte) (Convert.ToUInt32(hex.Substring(6, 2), 16));
return new SolidColorBrush(Windows.UI.Color.FromArgb(a, r, g, b));
}

如果有小伙伴传入一个不带透明的,那么上面的代码就会出现异常,因为不带透明的颜色只有 6 个字符,所以就无法使用上面的代码,我修改了下面代码可以转换颜色

       public SolidColorBrush GetSolidColorBrush(string hex)
{
hex = hex.Replace("#", string.Empty); bool existAlpha = hex.Length == 8; if (!existAlpha && hex.Length != 6)
{
throw new ArgumentException("输入的hex不是有效颜色");
} int n = 0;
byte a;
if (existAlpha)
{
n = 2;
a = (byte) ConvertHexToByte(hex, 0);
}
else
{
a = 0xFF;
} var r = (byte) ConvertHexToByte(hex, n);
var g = (byte) ConvertHexToByte(hex, n + 2);
var b = (byte) ConvertHexToByte(hex, n + 4);
return new SolidColorBrush(Windows.UI.Color.FromArgb(a, r, g, b));
} private static uint ConvertHexToByte(string hex, int n)
{
return Convert.ToUInt32(hex.Substring(n, 2), 16);
}

大家可以从上面代码发现 ConvertHexToByte 这就是 16 进制转 int 的方法,请看C# 16 进制字符串转 int

但是存在这样写的颜色 #FD92 #DAC 的颜色,所以还需要继续修改一下算法

       public SolidColorBrush GetSolidColorBrush(string hex)
{
hex = hex.Replace("#", string.Empty); //#FFDFD991
//#DFD991
//#FD92
//#DAC bool existAlpha = hex.Length == 8 || hex.Length == 4;
bool isDoubleHex = hex.Length == 8 || hex.Length == 6; if (!existAlpha && hex.Length != 6 && hex.Length != 3)
{
throw new ArgumentException("输入的hex不是有效颜色");
} int n = 0;
byte a;
int hexCount = isDoubleHex ? 2 : 1;
if (existAlpha)
{
n = hexCount;
a = (byte) ConvertHexToByte(hex, 0, hexCount);
if (!isDoubleHex)
{
a = (byte) (a * 16 + a);
}
}
else
{
a = 0xFF;
} var r = (byte) ConvertHexToByte(hex, n, hexCount);
var g = (byte) ConvertHexToByte(hex, n + hexCount, hexCount);
var b = (byte) ConvertHexToByte(hex, n + 2 * hexCount, hexCount);
if (!isDoubleHex)
{
//#FD92 = #FFDD9922 r = (byte) (r * 16 + r);
g = (byte) (g * 16 + g);
b = (byte) (b * 16 + b);
} return new SolidColorBrush(Windows.UI.Color.FromArgb(a, r, g, b));
} private static uint ConvertHexToByte(string hex, int n, int count = 2)
{
return Convert.ToUInt32(hex.Substring(n, count), 16);
}

如果想看微软的转换,请看 https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Media/Parsers.cs

可以复制的源代码:

<script src="https://gist.github.com/lindexi/36c5e223ff77cfb8adc4909dec1576b5.js"></script>

如果你没有在上面看到代码,请点击 <https://gist.github.com/lindexi/36c5e223ff77cfb8adc4909dec1576b5 >

颜色转字符串

如果需要从颜色转字符串是很简单

Color.ToString()

上面的代码就可以输出字符串

2019-11-29-win10-uwp-颜色转换的更多相关文章

  1. 2019.11.29 Mysql的数据操作

    为名为name的表增加数据(插入所有字段) insert into name values(1,‘张三’,‘男’,20); 为名为name的表增加数据(插入部分字段) insert into name ...

  2. 2019.11.29 SAP SMTP郵件服務器配置 發送端 QQ郵箱

    今天群裏的小夥伴問了如何配置郵件的問題,隨自己在sap裏面配置了一個 1.    RZ10配置參數 a)       参数配置前,先导入激活版本 执行完毕后返回 b)      输入参数文件DEFAU ...

  3. pycharm+anaconda在Mac上的配置方法 2019.11.29

    内心os: 听人说,写blog是加分项,那他就不是浪费时间的事儿了呗 毕竟自己菜还是留下来东西来自己欣赏吧 Mac小电脑上进行python数据开发环境的配置 首先下载Anaconda,一个超好用的数据 ...

  4. Supervision meeting notes 2019/11/29

    topic 分支:  1. subgraph/subsequence mining Wang Jin, routine behavior/ motif. Philippe Fournier Viger ...

  5. EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)

    传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...

  6. win10 uwp 随着数字变化颜色控件

    我朋友在做一个控件,是显示异常,那么异常多就变为颜色,大概就是下面的图,很简单 首先是一个Ellipse,然后把他的颜色绑定到Int,需要一个转换,UWP的转换和WPF差不多,因为我现在还不会转换,就 ...

  7. win10 uwp MVVM 轻量框架

    如果在开发过程,遇到多个页面之间,需要传输信息,那么可能遇到设计的问题.如果因为一个页面内包含多个子页面和多个子页面之间的通信问题找不到一个好的解决方法,那么请看本文.如果因为ViewModel代码越 ...

  8. win10 uwp 读取保存WriteableBitmap 、BitmapImage

    我们在UWP,经常使用的图片,数据结构就是 BitmapImage 和 WriteableBitmap.关于 BitmapImage 和 WriteableBitmap 区别,我就不在这里说.主要说的 ...

  9. win10 uwp 如何使用DataTemplate

    这是数据模板,一般用在数组的绑定,显示数组中的元素. 假如我们有一个列表,列表里是书,包括书名.作者.还有出版,那么我们只有源信息,如何把它显示到我们的ListView,就需要DataTemplate ...

  10. Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

    在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...

随机推荐

  1. Google Analytics 学习笔记二 —— GA部署

    一.直接部署 直接复制GA跟踪代码 放到所有页面 跟踪代码放到 "head"前面 二.GTM部署方法一 三.GTM部署方法二 Tacking ID 四.测试.参数配置与调优

  2. Tomcat部署项目时,发布的项目页面部分乱码,且页面渲染文件也是乱码。

    catalina.bat中必须设置为UTF-8,如果我不设置为UTF-8,页面接收到的就是乱码了,尝试过各种UTF-8的调试,都无解,最后还是只能在catalina.bat的set "JAV ...

  3. [PHP] 广度优先搜索匹配网站所有链接

    <?php define('PRE_DOMAIN','www'); define('DOMAIN','sina.com.cn'); define('PROTOCOL','https'); def ...

  4. 逆向破解之160个CrackMe —— 010-011

    CrackMe —— 010 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  5. 未加载opencv_world330.pdb

    根据设置下载对应的pdb文件. 无法查找或打开pdb文件

  6. shell-基础2

    条件表达式 文件判断 文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file 文件存在且为普通文件则为 ...

  7. python的requests库

    requests是在爬虫中常用到的一个库,它可以帮助我们很好的去请求我们想要爬取的网站,并返回网站的内容. 0x01:请求 get请求.post请求这两个是最常用的请求方式,此外还有类似delete. ...

  8. 【目标检测】YOLO:

    PPT 可以说是讲得相当之清楚了... deepsystems.io 中文翻译: https://zhuanlan.zhihu.com/p/24916786 图解YOLO YOLO核心思想:从R-CN ...

  9. web框架--tornado框架之模板引擎继承

    使用模板的继承可以重复使用相同结构的模板, 可以大大减少代码量 入门实例 一.demo目录结构 注解: master.html为模板内容,被index.html,account.html引用 二.各文 ...

  10. [LeetCode] 379. Design Phone Directory 设计电话目录

    Design a Phone Directory which supports the following operations: get: Provide a number which is not ...