title author date CreateTime categories
win10 uwp 颜色转换
lindexi
2019-09-02 12:57:38 +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-9-2-win10-uwp-颜色转换的更多相关文章

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

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

  2. win10 uwp MVVM 轻量框架

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

  3. win10 uwp 读取保存WriteableBitmap 、BitmapImage

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

  4. win10 uwp 如何使用DataTemplate

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

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

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

  6. win10 uwp 列表模板选择器

    本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...

  7. win10 uwp DataContext

    本文告诉大家DataContext的多种绑法. 适合于WPF的绑定和UWP的绑定. 我告诉大家很多个方法,所有的方法都有自己的优点和缺点,可以依靠自己喜欢的用法使用.当然,可以在新手面前秀下,一个页面 ...

  8. 【广告】win10 uwp 水印图床 含代码

    本文主要是广告我的软件. 图床可以加速大家写博客上传图片的时间,通过简化我们的操作来得到加速. 在写博客的时候,我们发现,我们需要上传一张图片,需要先打开图片,然后选择本地图片,然后上传. 但是我经常 ...

  9. win10 uwp 入门

    UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客. 关于UWP介绍可以参见:http://lib.csdn.net/article/csharp/32451 首先需要申请一 ...

  10. win10 uwp smms图床

    本文,如何使用smms图床上传图片,用到win10 uwp post文件,因为我是渣渣,如果本文有错的,请和我说,在本文评论,或发给我邮箱lindexi_gd@163.com,请不要发不良言论 找到一 ...

随机推荐

  1. IDA Pro - 如何得到比较清楚的逆向伪代码

    原文地址:Question about disassembler 简介 这篇文章介绍了如何在不使用插件的IDA Hex-Rays如何得到比较清晰的伪代码.IDA Hex-Rays功能很强大,只要你提供 ...

  2. Kotlin中?和!!的区别

    很多同学刚上手使用Kotlin知道它有针对Java NullPointerException的管理,而在Kotlin中?和!!均是和NullPointerException有关系,可他们的区别到底是什 ...

  3. Android listview子控件的的点击事件(转)

    1.先看图,是否是你想要的 2.布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout ...

  4. Sass Maps的函数-map-values($map)、map-merge($map1,$map2)

    map-values($map) map-values($map) 函数类似于 map-keys($map) 功能,不同的是 map-values($map )获取的是 $map 的所有 value ...

  5. spring依赖搜索

    spring项目在启动时,spring框架会根据名称自动搜索实现类. 这在日常开发中还是很有用的. 下面举两个例子. 1. 先写一个接口(或者抽象类) public interface IPerson ...

  6. a标签指定的url,在表单提交前进行js验证的实现

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Dataphin帮助企业构建数据中台系列之--萃取数据中心

    Dataphin作为阿里巴巴数据中台OneData (OneModel.OneID.OneService)方法论的产品载体,帮助企业构建三大数据中心:基于数据集成形成的垂直数据中心.基于数据开发沉淀的 ...

  8. @encode关键字

    @encode() 为了更好的互操作性,Objective-C 的数据类型,甚至自定义类型.函数或方法的元类型,都可以使用 ASCII 编码.@encode(aType) 可以返回该类型的 C 字符串 ...

  9. tomcat启动前端项目

    前后端分离项目,前端使用vue,部署启动前端项目可以使用NodeJS,Nginx,Tomcat. *)使用Tomcat部署启动: 1.把vue项目build生成的dist包,放到Tomcat的weba ...

  10. 高并发大流量专题---11、Web服务器的负载均衡

    高并发大流量专题---11.Web服务器的负载均衡 一.总结 一句话总结: 推荐使用nginx七层(应用层)负载均衡的实现:配置那是相当的简单 http{ upstream cluster{ serv ...