Flutter如何实现颜色HLS转HEX
在Flutter开发中,我想将HLS颜色格式转换为HEX格式,但不知道如何实现。查了官方文档也没找到直接可用的方法,请问有没有现成的Dart库或代码片段可以实现这个转换?最好能附带一个简单的使用示例,谢谢!
2 回复
在Flutter中,使用HSLColor.fromAHSL创建HLS颜色,然后调用toColor()转为Color对象,最后用.value.toRadixString(16)获取HEX值。
更多关于Flutter如何实现颜色HLS转HEX的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现HLS转HEX,可以通过以下步骤完成:
- HLS转RGB:先将HLS颜色值转换为RGB格式
- RGB转HEX:再将RGB值转换为HEX字符串
import 'package:flutter/material.dart';
class ColorConverter {
/// 将HLS转换为HEX颜色
/// h: 色相 (0-360)
/// l: 亮度 (0-1)
/// s: 饱和度 (0-1)
static String hlsToHex(double h, double l, double s) {
// 先转换为RGB
Color rgbColor = _hlsToRgb(h, l, s);
// 再转换为HEX
return _rgbToHex(rgbColor.red, rgbColor.green, rgbColor.blue);
}
/// HLS转RGB
static Color _hlsToRgb(double h, double l, double s) {
h = h % 360.0;
double c = (1 - (2 * l - 1).abs()) * s;
double x = c * (1 - ((h / 60) % 2 - 1).abs());
double m = l - c / 2;
double r = 0, g = 0, b = 0;
if (h >= 0 && h < 60) {
r = c; g = x; b = 0;
} else if (h >= 60 && h < 120) {
r = x; g = c; b = 0;
} else if (h >= 120 && h < 180) {
r = 0; g = c; b = x;
} else if (h >= 180 && h < 240) {
r = 0; g = x; b = c;
} else if (h >= 240 && h < 300) {
r = x; g = 0; b = c;
} else if (h >= 300 && h < 360) {
r = c; g = 0; b = x;
}
return Color.fromRGBO(
((r + m) * 255).round(),
((g + m) * 255).round(),
((b + m) * 255).round(),
1.0,
);
}
/// RGB转HEX
static String _rgbToHex(int r, int g, int b) {
return '#${r.toRadixString(16).padLeft(2, '0')}'
'${g.toRadixString(16).padLeft(2, '0')}'
'${b.toRadixString(16).padLeft(2, '0')}';
}
}
// 使用示例
void main() {
String hexColor = ColorConverter.hlsToHex(120, 0.5, 0.8);
print(hexColor); // 输出类似: #33cc66
}
参数说明:
- h (色相):0-360度,表示颜色在色轮上的位置
- l (亮度):0-1,0为黑色,1为白色
- s (饱和度):0-1,0为灰色,1为纯色
注意事项:
- 确保输入值在有效范围内
- 输出的HEX字符串格式为
#RRGGBB - 如果需要透明度,可以扩展支持A通道

