Skip to main content

4月28日 内置类Color类

Color 类是 .NET 中用于表示和操作颜色的结构体(struct),主要用于图形界面开发、图像处理和绘图操作。


核心定义

// 位于 System.Drawing 命名空间
public readonly struct Color : IEquatable<Color>
{
// 存储 ARGB 值 (Alpha, Red, Green, Blue)
// 每个通道 0-255,共 32 位
}

创建 Color 的 4 种方式

1. 使用预定义颜色(最简单)

using System.Drawing;

Color c1 = Color.Red; // 红色
Color c2 = Color.LightBlue; // 浅蓝
Color c3 = Color.Transparent; // 透明
// 共 141+ 个预定义颜色

2. FromArgb 方法(自定义 RGBA)

// RGB 三参数 (Alpha 默认 255 不透明)
Color c1 = Color.FromArgb(255, 0, 0); // 纯红

// ARGB 四参数 (A=透明度 0-255)
Color c2 = Color.FromArgb(128, 255, 0, 0); // 半透明红

// 单参数 (32位整数 0xAARRGGBB)
Color c3 = Color.FromArgb(0xFF00FF00); // 绿色

3. FromName 方法(字符串名称)

Color c = Color.FromName("DarkBlue");  // 通过颜色名

4. FromHtml / FromHex(Web 颜色)

// 注意:System.Drawing 本身没有 FromHex
// 需要转换或使用其他库
Color c = ColorTranslator.FromHtml("#FF5733"); // Web 颜色代码

常用属性与方法

成员说明示例
R, G, B, A获取各通道值 (byte)byte red = Color.Red.R; → 255
IsEmpty是否未初始化bool empty = color.IsEmpty;
IsNamedColor是否预定义颜色Color.Red.IsNamedColor → true
Name颜色名称Color.Red.Name → "Red"
ToArgb()转为 32 位整数int argb = color.ToArgb();
GetBrightness()获取亮度 (0-1)用于颜色调整
GetHue() / GetSaturation()色相/饱和度HSB 色彩空间

实际使用场景

场景 1:WinForms 控件背景色

// 设置按钮背景为蓝色
button1.BackColor = Color.Blue;

// 设置窗体背景为自定义颜色
this.BackColor = Color.FromArgb(240, 248, 255); // AliceBlue

场景 2:GDI+ 绘图

using System.Drawing;

// 创建画笔和画刷
using (Graphics g = this.CreateGraphics())
{
// 实心填充
using (SolidBrush brush = new SolidBrush(Color.FromArgb(100, 255, 0, 0)))
{
g.FillRectangle(brush, 10, 10, 100, 100); // 半透明红矩形
}

// 绘制线条
using (Pen pen = new Pen(Color.Green, 3f))
{
g.DrawLine(pen, 0, 0, 100, 100);
}
}

场景 3:颜色插值/渐变

// 线性插值两个颜色
Color Interpolate(Color c1, Color c2, float t)
{
int r = (int)(c1.R + (c2.R - c1.R) * t);
int g = (int)(c1.G + (c2.G - c1.G) * t);
int b = (int)(c1.B + (c2.B - c1.B) * t);
return Color.FromArgb(r, g, b);
}

Color purple = Interpolate(Color.Red, Color.Blue, 0.5f);

场景 4:数据可视化(根据数值着色)

// 温度映射到颜色:低温蓝 -> 高温红
Color GetTemperatureColor(float temp, float min, float max)
{
float ratio = (temp - min) / (max - min);
int r = (int)(255 * ratio); // 温度越高红色越多
int b = (int)(255 * (1 - ratio)); // 温度越低蓝色越多
return Color.FromArgb(r, 0, b);
}

注意事项

注意点说明
值类型Color 是 struct,赋值时复制值,不是引用
不可变创建后不能修改,"修改"需创建新实例
跨平台限制System.Drawing 主要用于 Windows,Linux/macOS 需额外配置
WPF 不同WPF 使用 System.Windows.Media.Color,支持浮点精度

快速参考图

Color 结构
├── 创建方式
│ ├── 预定义: Color.Red
│ ├── RGB: Color.FromArgb(r, g, b)
│ ├── ARGB: Color.FromArgb(a, r, g, b)
│ └── HTML: ColorTranslator.FromHtml("#FF0000")

└── 使用场景
├── 控件颜色: button.BackColor
├── GDI+ 绘图: new SolidBrush(color)
└── 图像处理: Bitmap.SetPixel(x, y, color)

一句话总结:Color 是 .NET 中封装 ARGB 四通道的颜色值类型,用于所有涉及颜色的 UI 和图形操作。