在 C# 中转换颜色代码

快速解答

要在 C# 中转换颜色代码,请使用 Color.FromString() 解析 CSS 颜色字符串,然后通过 ToRgbString()ToRgbHexString()ToRgbaHexString() 输出结果。此流程可将 HEX 转为 RGB、RGB 转为 HEX、HSL 转为 HEX、命名颜色转为 HEX,并将 SVG 颜色标准化为统一格式。

本文介绍如何使用 Aspose.SVG for .NET 以编程方式转换颜色代码。 Color 类可以解析 HEX、RGB、RGBA、HSL、HSLA、HWB、LAB、LCH、OKLAB、OKLCH、CMYK、NCOL 以及命名颜色,并将其转换为所需的输出格式。

颜色转换适用于比较 SVG 颜色、标准化从文件中提取的值、准备调色板,以及为报告或验证转换 CSS 颜色格式。

您将学习如何:

使用的 Aspose.SVG API

示例使用 Aspose.SVG 绘图 API:

API用途
Color表示已解析的颜色并在输出格式之间进行转换
Color.FromString()解析 #ff31cargb(...)hsl(...)blackcmyk(...) 等 CSS 颜色字符串
Color.FromRgb()根据 RGB 分量创建颜色
Color.FromHsl()根据 HSL 分量创建颜色
Color.FromCmyk()根据 CMYK 分量创建颜色
ToRgbString()将颜色输出为 rgb(R, G, B)
ToRgbHexString()将颜色输出为 #RRGGBB
ToRgbaHexString()将颜色输出为 #RRGGBBAA
Convert()返回所选 ColorModel 的颜色分量

常见颜色转换任务

下表汇总了 C# 中常见的颜色转换流程:

任务C# 用法
HEX 转 RGBColor.FromString("#ff31ca").ToRgbString()
RGB 转 HEXColor.FromString("rgb(255, 49, 202)").ToRgbHexString()
HSL 转 HEXColor.FromString("hsl(315, 100%, 60%)").ToRgbHexString()
命名颜色转 HEXColor.FromString("black").ToRgbHexString()
RGBA 转八位 HEXColor.FromString("rgba(255, 49, 202, 0.5)").ToRgbaHexString()
标准化 SVG 颜色使用 Color.FromString() 解析每个值,并通过 ToRgbHexString() 输出

颜色转换示例

以下示例涵盖 C# 中的主要任务,包括转换 HEX、RGB、HSL、命名颜色和 RGBA,根据分量创建颜色,以及标准化从 SVG 中提取的颜色。

将 HEX 转换为 RGB

使用 Color.FromString() 解析 HEX 值,然后调用 ToRgbString()

1using Aspose.Svg.Drawing;
2using System;
 1// Convert a HEX color value to RGB format in C#
 2
 3// Parse HEX color from a string
 4Color color = Color.FromString("#ff31ca");
 5
 6// Convert HEX to RGB
 7string rgbColor = color.ToRgbString();
 8
 9// Print result to console
10Console.WriteLine(rgbColor);
11// Result: rgb(255, 49, 202)

当颜色以 CSS HEX 代码提供,而报告、验证或后续图像处理需要 RGB 时,请使用此转换。

将 RGB 转换为 HEX

解析 RGB 字符串,并使用 ToRgbHexString() 输出标准化的六位 HEX 值:

1using Aspose.Svg.Drawing;
2using System;
 1// Convert an RGB color value to HEX format in C#
 2
 3// Parse RGB color from a string
 4Color color = Color.FromString("rgb(255, 49, 202)");
 5
 6// Convert RGB to HEX
 7string hexColor = color.ToRgbHexString();
 8
 9// Print result to console
10Console.WriteLine(hexColor);
11// Result: #FF31CA

当所有提取的 SVG 或 CSS 颜色都需要使用同一格式时,此方法非常有用。

将 HSL 转换为 HEX

SVG 和 CSS 可以使用 HSL 表示颜色。您可以解析 HSL 字符串并将其转换为 HEX:

1using Aspose.Svg.Drawing;
2using System;
 1// Convert an HSL color value to HEX format in C#
 2
 3// Parse HSL color from a string
 4Color color = Color.FromString("hsl(315, 100%, 60%)");
 5
 6// Convert HSL to HEX
 7string hexColor = color.ToRgbHexString();
 8
 9// Print result to console
10Console.WriteLine(hexColor);
11// Result: #FF33CC

当 CSS 工具、设计系统或主题以 HSL 存储颜色,而应用程序需要 HEX 进行比较或输出时,请使用此方法。

将命名颜色转换为 HEX

Color.FromString() 可以解析 CSS 颜色名称,因此在处理 SVG 属性时可以轻松标准化命名值。

1using Aspose.Svg.Drawing;
2using System;
 1// Convert a named color value to HEX format in C#
 2
 3// Parse a named color from a string
 4Color color = Color.FromString("black");
 5
 6// Convert named color to HEX
 7string hexColor = color.ToRgbHexString();
 8
 9// Print result to console
10Console.WriteLine(hexColor);
11// Result: #000000

这对 SVG 尤其有用,因为设计工具和手写文件可能同时包含颜色名称、HEX 值和 CSS 颜色函数。

转换 RGBA 并保留 Alpha 通道

如果颜色包含透明度,请使用八位 HEX 输出以保留 Alpha 通道。该通道对于半透明 SVG 填充、描边、阴影、叠加层和界面元素十分重要。

1using Aspose.Svg.Drawing;
2using System;
1// Convert an RGBA color value to 8-digit HEX format in C#
2
3// Parse RGBA color from a string
4Color color = Color.FromString("rgba(255, 49, 202, 0.5)");
5
6// Convert RGBA to 8-digit HEX
7Console.WriteLine(color.ToRgbaHexString());
8// Result: #FF31CA7F

如果只需要 RGB 颜色,请使用 ToRgbHexString();如果需要在 HEX 中保留透明度,请使用 ToRgbaHexString()

有关透明度工作流程,请参阅 C# 中的 SVG 不透明度和透明颜色

根据分量值创建颜色

无需解析字符串即可直接根据分量创建颜色。以下示例分别使用 RGB、HSL 和 CMYK 分量创建相同的红色:

1using Aspose.Svg.Drawing;
2using System;
 1// Create the same red color from RGB, HSL, and CMYK components in C#
 2
 3// Create a color from RGB components
 4Color rgbColor = Color.FromRgb(255, 0, 0);
 5
 6// Create a color from HSL components
 7Color hslColor = Color.FromHsl(0, 1, 0.5f);
 8
 9// Create a color from CMYK components
10Color cmykColor = Color.FromCmyk(0, 1, 1, 0);
11
12// Print converted color values to console
13Console.WriteLine(rgbColor.ToRgbHexString());
14Console.WriteLine(hslColor.ToRgbString());
15Console.WriteLine(cmykColor.ToRgbHexString());
16// Result:
17// #FF0000
18// rgb(255, 0, 0)
19// #FF0000

此方法适用于调色板生成器、导入流程,以及从数据库或界面控件接收颜色通道的应用程序。

将 SVG 颜色标准化为 HEX

SVG 中的等效颜色可能采用不同格式:

1<rect fill="#808080" />
2<circle fill="rgb(128, 128, 128)" />
3<path stroke="hsl(0, 0%, 50%)" />

为了比较、生成报告或去重,请使用 Color.FromString()ToRgbHexString() 标准化这些值:

1using Aspose.Svg.Drawing;
2using System;
3using System.Collections.Generic;
 1// Normalize SVG color values to HEX format in C#
 2
 3
 4// Store equivalent colors written in different formats
 5List<string> sourceColors = new List<string>
 6{
 7    "#808080",
 8    "rgb(128, 128, 128)",
 9    "hsl(0, 0%, 50%)"
10};
11
12foreach (string sourceColor in sourceColors)
13{
14    // Parse each color value from a string
15    Color color = Color.FromString(sourceColor);
16
17    // Convert each color to HEX and print the result
18    Console.WriteLine($"{sourceColor} -> {color.ToRgbHexString()}");
19}

预期输出:

1#808080 -> #808080
2rgb(128, 128, 128) -> #808080
3hsl(0, 0%, 50%) -> #808080

如果需要先从实际 SVG 文件中提取颜色,请参阅 在 C# 中提取 SVG 颜色

在线颜色转换器

您可以在线或通过代码转换颜色。 颜色转换器免费工具支持颜色名称以及 HEX、RGB、HSL、HSV、LAB、HWB、CMYK、LCH、XYZ 和 NCOL。输入颜色代码或直观选择颜色,即可查看其他格式的等效值。

颜色代码格式

不同格式以不同方式描述相同的可见颜色。有些常用于 CSS 和 SVG,另一些用于设计系统、印刷或色彩科学。CSS 颜色语法由 CSS Color Module Level 4 定义。

RGB 和 RGBA

RGB(Red、Green、Blue)通过 sRGB 色彩空间中的红、绿、蓝通道定义颜色。在 CSS 和 SVG 中,常写为 rgb(255, 0, 0),也可使用 rgb(100%, 0%, 0%) 等百分比。RGBA(Red、Green、Blue、Alpha)增加 Alpha 通道,例如 rgba(255, 0, 0, 0.5)

RGB 适用于屏幕颜色和图像 API。RGBA 适用于透明度属于颜色值本身的情况,例如半透明 SVG 填充、描边、阴影或叠加层。颜色 Alpha 与 SVG 不透明度属性相关但并不相同:rgba(...) 在颜色值中存储透明度,而 opacityfill-opacitystroke-opacity 是独立的 SVG 属性。

HEX

HEX(十六进制)是 CSS 和 SVG 中紧凑的 sRGB 表示法,可写为 #RGB#RGBA#RRGGBB#RRGGBBAA。在完整形式中,RRGGBB 存储 00FF 的通道值,AA 表示 Alpha:00 为完全透明,FF 为完全不透明。请参阅 CSS Color Module Level 4 的 HEX 表示法以及 MDN <hex-color> 参考。

HEX 广泛用于 SVG 属性、CSS 声明、设计系统、图标集和 Web 界面配置。它也适合作为标准化输出,因为格式紧凑、稳定,并且易于按文本比较。

HSL 和 HSLA

HSL 通过色相、饱和度和亮度表示颜色。色相是色轮上的角度,饱和度控制颜色强度,亮度控制颜色接近黑色或白色的程度。HSLA(Hue、Saturation、Lightness、Alpha)增加 Alpha 透明度。

HSL 便于创建更亮、更暗或饱和度更高的颜色变体。在设计系统中,调整亮度和饱和度通常比修改各个 RGB 通道更直观。为了比较、报告或清理 SVG,HSL 值通常会标准化为 RGB 或 HEX。

HSV 和 HWB

HSV(Hue、Saturation、Value)存储色相、饱和度和值,常用于颜色选择器和设计工具。HWB 存储色相、白度和黑度,可用于生成明暗变化。

这些格式较少出现在手写 SVG 中,但可能来自颜色转换器、设计导出或调色板编辑器。与 SVG 属性比较之前,请先将 HSV 或 HWB 转换为统一输出格式。

LAB、LCH、OKLAB 和 OKLCH

LAB 和 LCH 是感知色彩空间,其中数值变化更接近人眼感知的差异。OKLAB 和 OKLCH 是现代 CSS 与设计流程中使用的较新模型。当 RGB 通道差异不足以描述视觉差异时,这些模型很有用。

这些模型适用于调色板、无障碍检查、色差分析和均匀色阶。对于 SVG,如果渲染器或验证规则要求传统 Web 格式,仍可将结果转换为 HEX 或 RGB。

CMYK 和 XYZ

CMYK(Cyan、Magenta、Yellow、Key/Black)面向印刷,由青色、品红色、黄色和黑色分量组成。它常用于印前处理,但不是 SVG 表现属性或浏览器 CSS 的常见语法。XYZ 是与设备无关的 CIE 色彩空间,用于色彩科学和转换流程。

CMYK 适合印刷数据,XYZ 适合技术转换或色彩管理系统。在 Web SVG 中写入 fillstrokestop-color 之前,请将这些颜色转换为 HEX 或 RGB 等基于 RGB 的表示形式。

常见错误及解决方法

问题原因解决方法
等效颜色不匹配一个颜色使用名称,另一个使用 HEX 或 RGB比较前使用 Color.FromString()ToRgbHexString() 标准化两者
透明度丢失RGBA 颜色使用了 ToRgbString()ToRgbHexString()使用 ToRgbaHexString() 在 HEX 中保留 Alpha
无法将 SVG 值解析为颜色nonecurrentColorurl(#id) 不是直接颜色值调用 Color.FromString() 前过滤这些值
输出与源文本不同转换会标准化表示法或字母大小写如果格式很重要,请单独保留原始字符串
期望 CMYK 或 LAB CSS 字符串API 将这些模型表示为分量使用 Convert(ColorModel) 获取所选模型的分量

常见问题

如何在 C# 中将 HEX 转换为 RGB?
使用 Color.FromString("#ff31ca") 解析 HEX,然后调用 ToRgbString() 得到 rgb(255, 49, 202)

如何在 C# 中将 RGB 转换为 HEX?
使用 Color.FromString("rgb(255, 49, 202)"),然后调用 ToRgbHexString() 得到标准化的 #RRGGBB 值。

能否在 C# 中将 HSL 转换为 HEX?
可以。使用 Color.FromString("hsl(315, 100%, 60%)") 解析 HSL,然后调用 ToRgbHexString()

能否在 C# 中解析 CSS 颜色名称?
可以。Color.FromString() 支持 CSS 颜色名称。随后可通过 ToRgbHexString() 或其他方法输出。对于包含预期结果的示例,请使用 black 等含义明确的名称。

如何将 SVG 颜色标准化为 HEX?
从 SVG 属性或样式中获取直接颜色值,跳过 nonecurrentColorurl(#id),使用 Color.FromString() 解析每个值,并通过 ToRgbHexString() 输出。

转换颜色时如何保留透明度?
使用 ToRgbaHexString() 输出八位 HEX。RGB 和六位 HEX 不保留 Alpha 通道。

Aspose.SVG 能否转换 CMYK、LAB、LCH、OKLAB 和 OKLCH?
可以。Color 类支持多种色彩空间。对于支持的 CSS 字符串,请使用 Color.FromString();也可使用 FromCmyk()FromLab()FromLch()FromOklab()FromOklch() 等方法。

相关资源

颜色转换器是一款免费的在线应用,可在颜色格式之间转换。输入颜色代码即可立即获得等效值。

在线颜色转换器横幅