zoukankan      html  css  js  c++  java
  • COLOR 与 COLORREF

    之前做过一个项目,在VS用C#写一个软件平台,平台中调用NI公司的绘图控件cwgraph绘图(简称graph)。由于graph里面虽然可以更改绘制的线的颜色,但是不具有实时性,只能在运行平台中之间就设置好。为了实现在C#平台中可以实时的更改graph控件里面的绘制的线的颜色,我读取了graph里面的线条的linestyle属性。这是一个uint型的数字。

    我们知道VS中对COLOR的定义是采用ARGB的方式,以int型数字来表示。 Alpha 是透明度,范围: 0——255,位于int的高8位; RED 是红,范围: 0——255,位于int的8-16位; Green 是绿,范围: 0——255,位于int的16-24位; Blue 是透明度,范围: 0——255,位于int的低8位。

    graph中的颜色定义则不大一样,它采用COLORREF的定义,以uint型数字表示。它的顺序是BGR,是反过来的。就是说Blue 是红,范围: 0——255,位于int的8-16位; Green 是绿,范围: 0——255,位于int的16-24位; RED 是透明度,范围: 0——255,位于int的低8位。

    知道这些之后,就可以方便的实现从graph中的linestyle读出颜色,然后找出VS中对应的颜色。为了实现用户可以实时的自定义颜色,我先将graphic供用户选择的颜色都读出来了转化为VS中的颜色,记住这些颜色供用户选择。然后用户选择之后就对linestyle进行更改就好了。

    下面说说我处理COLOR跟COLOREF的方法:

    colorref ---->color     
    uint refcolor = 255 << 16 | 128 << 8 | 0;      //定义一种linestyle
    uint blue = refcolor >> 16 & 255;
    uint green = refcolor >>8 & 255;
    uint red =refcolor & 255;
    int colorARGB = 255 << 24 | (int)red <<16 | (int)green << 8 | (int)blue;     //Alpha这个参数是透明度,它越大颜色就越深,它只影响颜色深度,这里就选了最大
    Color ARGB = Color.FromArgb(colorARGB) ;  //得到结果
     
     
    color---->colorref    
    Color ARGB ;                              //给定的
    int colorInt = ARGB.toArgb();
    int red = colorInt >> 16 & 255; 
    int green = colorInt >> 8 & 255;
    int blue = colorInt & 255;
    uint refcolor = (uint)blue << 16 | (uint)green << 8 | (uint)red;  
  • 相关阅读:
    C# 字符串转为DateTime类型
    多线程的注意事项
    linux 安装中文支持
    发布网站遇到的坑
    配置iis支持json解析,配置ssi
    SEO之图片优化
    SEO之面包屑导航
    SEO之HTML标签
    SEO之优化代码
    SEO之网站内部结构优化
  • 原文地址:https://www.cnblogs.com/tqianly/p/3576342.html
Copyright © 2011-2022 走看看