如何将RGB数组转换为0xff格式Color值或Colour(R,G,B)格式参数
实现方案
你可以直接在异步回调中拆分返回的RGB数组,分别实现你需要的两种转换需求,代码示例如下:
getColorFromUrl(url).then((color) { // 拆分RGB数组的三个通道值 final r = color[0]; final g = color[1]; final b = color[2]; // 1. 转换为容器所需的0xff开头的Color格式 final targetColor = Color(0xff000000 | (r << 16) | (g << 8) | b); // 生成的targetColor可直接传给容器的颜色参数 // 2. 转换为不带方括号的Colour(43,43,12)格式字符串 final formatStr = "Colour($r,$g,$b)"; print(formatStr); // 输出结果:Colour(43,43,12) });
如果需要高频复用,可以封装为独立工具方法:
// RGB数组转0xff格式Color Color rgbToColor(List<int> rgb) => Color(0xff000000 | (rgb[0] << 16) | (rgb[1] << 8) | rgb[2]); // RGB数组转Colour(r,g,b)格式字符串 String rgbToColourStr(List<int> rgb) => "Colour(${rgb[0]},${rgb[1]},${rgb[2]})";
原理说明
- 0xff开头的Color本质是32位整型值,最高位
0xff对应完全不透明的Alpha通道,后续依次对应R、G、B三个通道的十六进制值,通过位运算拼接三个通道的数值即可直接生成合规的Color对象。 - 要生成指定格式的字符串,只需取出数组三个位置的数值做字符串拼接即可,自动去掉原数组的方括号。
内容的提问来源于stack exchange,提问作者OP SUNIL
相关产品推荐
相关产品推荐

