GDI+ 颜色表示

 一、GDI+中:
Color位于System.Drawing命名空间下。
当我们需要使用某种颜色时,我们可以用以下几种方式:

(1)Color.FromArgb(alpha, red, green, blue) //alpha为0~255
(2)Color.FromArgb(red, green, blue) //此时alpha值始终为255,即不透明
(3)Color.FromKnownColor(KnownColor color)
(4)Color.FromName(string knownColorString)
(5)Color.FromSysIcv(int icv)
比如:
Color redAlpha50Percent = Color.FromArgb(128, 255, 0, 0); //半透明红色
Color redWithoutAlpha = Color.FromArgb(255, 0, 0); //红色(完全不透明)
Color redFromKnownColor = Color.FromKnownColor(KnownColor.Red);
Color redFromName = Color.FromName("Red");

比如用红色填充一个矩形:
graphics.FillRectangle(new SolidBrush(redFromKnownColor), 10, 10, 100, 40);
为了进行比较,我将有区别的静态方法用“ 代码  ”底色突出。
由于某些颜色“众所周知”,在各种环境和操作系统中均使用统一的字面说法,比如红色(Red),黑色(Black)等等。它们是在系统中已知(或者说是已经预先定义)的颜色。

二、WPF中:
Color位于System.Windows.Media命名空间下。
由于WPF中有XAML,所以,我们分两种情况来描述:
1、当我们在XAML中使用颜色时,我们可以使用XAML的属性:

(1)<object property="predefinedColor"/>
predefinedColor为预定义颜色(见上图)

(2)<object property="#rgb"/>
(3)<object property="#rrggbb"/>
(4)<object property="#argb"/>
(5)<object property="#aarrggbb"/>
其中r,g,b分别为0~F的十六进制颜色值,a为0~F的十六进制值,用于表示Alpha数值(不透明度)。

(6)<object property="sc# scA,scR,scG,scB"/>
其中,sc# 为关键字,scA,scR,scG,scB为介于0.0~1.0的Single值。

(7)<object property="ContextColor profileUri alphaValue,colorValue"/>
其中,ContextColor为关键字,profileUri为icm文件的地址,后面是alpha值和颜色值。

下面分别举例:
使用蓝色填充宽为100,高为40的矩形:
其中,Blue为预定义颜色(蓝色,它的十六位进制#rgb的表示是:#00F;#rrggbb的表示是:#0000FF;#argb表示是:#00F;#aarrggbb表示为:#FF0000FF)

(1)XAML代码:

<Rectangle Width="100" Height="40" Fill="Blue" />

注意:这里的Rectangle对应于上面的object, Fill则对应于property,而Blue就是预定义好的颜色值了。但需要说明的是,这里的Fill="Blue"最终会被转换成SolidColorBrush.

C#代码:

Rectangle myPredefinedBrushRectangle = new Rectangle();
myPredefinedBrushRectangle.Width = 100;
myPredefinedBrushRectangle.Height = 40;
myPredefinedBrushRectangle.Fill = Brushes.Blue;

(2)也可以这样:

<Rectangle Width="100" Height="40" Fill="#FF0000FF" />

(3)还可以这样:

<Rectangle Width="100" Height="40">
  <Rectangle.Fill>
    <SolidColorBrush>
     <SolidColorBrush.Color>
        <Color A="255" R="0" G="0" B="255" />
<!-- 还可以这样:
        <Color ScA="1.0" ScR="0.0" ScG="0.0" ScB="1.0" />
-->
     </SolidColorBrush.Color>
    </SolidColorBrush>
  </Rectangle.Fill>
</Rectangle>

上面的SolidColorBrush标签的内容还可以改成:

<SolidColorBrush Color="ContextColor
   file://C:/WINDOWS/system32/spool/drivers/color/sRGB%20Color%20Space%20Profile.icm
   1.0,0.0,0.0,1.0"/>

如果用C#代码:

Rectangle myRgbRectangle = new Rectangle();
myRgbRectangle.Width = 100;
myRgbRectangle.Height = 40;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);
myRgbRectangle.Fill = mySolidColorBrush;

2、使用C#代码描述:

(1)Color.FromRgb(red, green, blue)
(2)Color.FromArgb(alpha, red, green, blue)
//alpha, red, green, blue为0~255的byte值

(3)Color.FromValues(colorValues, iccUri)
(4)Color.FromAValues(alpha, colorValues, iccUri)
//alpha为0.0f~1.0f的值; colorValues为float[4]数组, 所有值均为0.0f~1.0f的值; iccUri为icc文件的地址
见下例:
private Color FromAValuesExample()
{
    // 褐色
    Color myAValuesColor = new Color();
    float [] colorValues = new float[4];
    colorValues[0] = 0.0f;
    colorValues[1] = 0.5f;
    colorValues[2] = 0.5f;
    colorValues[3] = 0.5f;
    //定义颜色映射的icc文件
    Uri iccUri = new Uri("C://sampleColorProfile.icc");
    myAValuesColor = Color.FromAValues(1.0f, colorValues, iccUri);
    return myAValuesColor;
}

(5)Color.FromScRgb(scA, scR, scG, scB)
scA, scR, scG, scB为Single类型值,比如:Color.Color.FromScRgb(1, 0, 0, 1);

三、比较一下:
我们发现,第二条1中(6)、(7)是在GDI+中所没有的。WPF为了更好的描述颜色,新增了scRGB颜色空间。还增加了icc文件对颜色的描述。
我们还发现,对于GDI+中的KnownColor,在WPF的C#代码中,已不见“踪影”,其实那是被转为另一种表现形式罢了。

实际上,WPF还对GDI+中没有涉及的CYMK印刷色的相关处理作了扩充。我会在今后的文章中详细描述它们。

更多参考:
Understanding the Colors in .NET

http://www.digcode.com/default.aspx?page=ed51cde3-d979-4daf-afae-fa6192562ea9&article=2c0290b8-6d38-4ce7-951d-c9080a187bef
.Net Color.cs http://www.koders.com/csharp/fid9CA7E93CA709734A9EFC563E7FAA04FCB3779F52.aspx

时间: 2024-10-13 12:05:00

GDI+ 颜色表示的相关文章

PixelFormat 图像颜色的数据格式

PixelFormat: (指定图像中每个像素的颜色数据的格式) Delphi                                        微软                                  说明 PixelAlpha                                Alpha                        像素数据包含没有进行过自左乘的 alpha 值. PixelCanonical                     

C#GDI+图像处理

http://www.cnblogs.com/BLoodMaster/archive/2010/03/20/1690726.html 支持格式:BMP.GIF.JPEG.EXIF.PNG.TIFF.ICON.WMF.EMF等,几乎涵盖所有常用格式 图像类: Image类:Bitmap和Metafile的类提供功能的抽象基类. Metafile类:定义图形图元文件,图元文件包含描述一系列图形操作的记录,这些操作可以被记录(构造)和被回放(显示) Bitmap类:封装GDI+位图,此位图由图形图像及

问题-[Delphi]PixelFormat 图像颜色的数据格式

PixelFormat: (指定图像中每个像素的颜色数据的格式) Delphi                                        微软                                  说明 PixelAlpha                                Alpha                        像素数据包含没有进行过自左乘的 alpha 值. PixelCanonical                     

使用DevExpress Reports和PDF Viewer创建AcroForm Designer

众所周知,交互式表单(AcroForms)是PDF标准的重要组成部分,AcroForms允许开发者和开发者的用户创建可填写的PDF文档.尽管WinForms和WPF PDF Viewers不支持交互式表单生成,但开发者可以在应用程序中加入AcroForm designer,并提供两种简单的解决方法.本文主要为大家介绍如何使用DevExpress Reports和PDF Viewer创建AcroForm Designer. [DevExpress v18.2下载] 使用DevExpress Rep

GDI+学习之 ------- 绘制角度可变的颜色渐变效果

GDI+ 是GDI(Windows 早期版本提供的图形设备接口)的后续版本,是Microsoft Windows XP作系统即后续版本的图形显示技术.它已经集成到了.Net开发环境中,所以不管你的OS是什么版本,只要安装了.Net框架,就有了GDI+(注意:是.Net框架,而不是.Net开发环境,所以Win98中也可以使用GDI+). 现在,言归正传. 在头文件中加入下面的代码: #include <GdiPlus.h> using namespace Gdiplus; #pragma com

如何解决在GDI画图中,多次修改画笔的颜色

首先创建个画笔对象: CPen gPen;gPen.CreatePen(PS_SOLID, 1, RGB(120,120,130));//一定灰度的画笔CPen* pOldPen = pDC->SelectObject(&gPen); 由于画笔一旦创建后就无法修改.所以要修改画笔的颜色要用DeleteObject函数将其删除?,之后再创建新的画笔. 下面是修改为红色的画笔: gPen.DeleteObject();gPen.CreatePen(PS_SOLID,1, RGB(255, 0,

win32学习之 --------GDI使用 代码记录

LRESULT QMainFrame::onPaint(WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hDC = ::BeginPaint(m_hWnd, &ps); RECT rcClient; GetClientRect(&rcClient); assert(hDC); { /**画字体 DrawText(hDC,_T("test"), _tcslen(_T("test")),&r

GDI基础

1.GDI 图像设备接口,windows程序显示点,线,图像,文字时,在显示器或打印机输出这些内容时,需要使用GDI2.when--在WM_PAINT时  where--设备描述表  how--调用GDI函数:  case WM_PAINT:  HDC hdc; //设备描述变量  PAINTSTRUCT ps; //绘图信息结构变量  hdc = BeginPaint(hwnd, &ps); //赋值给hdc  GetClientRect(hwnd, &rect);   //TextOu

VB6 GDI+ 入门教程——图片

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://vistaswx.blogbus.com/logs/41225905.html VB自己的绘图语句都需要用LoadPicture载入图片,同样,GDI+中也需要. 1.载入(初始化)图片资源 (1)来自文件:GdipLoadImageFromFile 我们先来看看这个最简单基本的载入图片来自文件: [vb] view plain copy print? Dim img As Long, img_W As Long, i