![](/img/trans.png)
[英]How to adjust Hue Saturation and Brightness of an image or widget in Flutter?
[英]How do I change color's hue, saturation, or value in Flutter?
假设我在 Flutter 中有一个颜色 object,我想更改它的色相或饱和度或亮度或亮度,我该怎么做?
谢谢
您可以使用这些辅助方法来更改它。 只需更换
newHueValue
: 任何双 btw 0 和 360newSaturationValue
: 任何双 0 和 1newLightnessValue
: 任何双 0 和 1Color changeColorHue(Color color) => HSLColor.fromColor(color).withHue(newHueValue).toColor();
Color changeColorSaturation(Color color) => HSLColor.fromColor(color).withSaturation(newSaturationValue).toColor();
Color changeColorLightness(Color color) => HSLColor.fromColor(color).withLightness(newLightnessValue).toColor();
同样,您可以使用: HSVColor
用于 HSV(色调、饱和度、值)。
更多: https://api.flutter.dev/flutter/painting/HSLColor-class.html
有几种方法可以做到这一点
1.大多数色板有colors,从100到900,以100为增量,加上颜色50。数字越小,颜色越淡。 数字越大,颜色越深。 重音样本(例如redAccent
)只有值100,
200,
400
700
示例Color selection = Colors.green[400]; // Selects a mid-range green.
Color selection = Colors.green[400]; // Selects a mid-range green.
此外,还提供一系列具有常见不透明度的黑色和白色。 例如,black54 是纯黑色,不透明度为 54%。
其他的颜色方法是
computeLuminance()
→ double 返回介于 0 表示最暗和 1 表示最亮之间的亮度值。
toString() →
String 返回此 object 的字符串表示形式。
withAlpha(int a)
→ Color 返回与此颜色匹配的新颜色,并将 Alpha 通道替换为 a(范围从 0 到 255)。
withBlue(int b) →
Color 返回与此颜色匹配的新颜色,蓝色通道替换为 b(范围从 0 到 255)。
withGreen(int g)
→ Color 返回与此颜色匹配的新颜色,并将绿色通道替换为 g(范围从 0 到 255)。
withOpacity(double opacity) →
Color 返回与此颜色匹配的新颜色,并将 alpha 通道替换为给定的不透明度(范围从 0.0 到 1.0)。
withRed(int r)
→ Color 返回与此颜色匹配的新颜色,其中红色通道替换为 r(范围从 0 到 255)。
除了@Tomas Barans 的回答:
下面是一些无需设置绝对值即可修改饱和度、色调和亮度的相关辅助方法:
Color increaseColorSaturation(Color color, double increment) {
var hslColor = HSLColor.fromColor(color);
var newValue = min(max(hslColor.saturation + increment, 0.0), 1.0);
return hslColor.withSaturation(newValue).toColor();
}
Color increaseColorLightness(Color color, double increment) {
var hslColor = HSLColor.fromColor(color);
var newValue = min(max(hslColor.lightness + increment, 0.0), 1.0);
return hslColor.withLightness(newValue).toColor();
}
Color increaseColorHue(Color color, double increment) {
var hslColor = HSLColor.fromColor(color);
var newValue = min(max(hslColor.lightness + increment, 0.0), 360.0);
return hslColor.withHue(newValue).toColor();
}
也可以使用扩展方法:
import 'package:flutter/foundation.dart';
import 'package:flutter/painting.dart';
extension ColorWithHSL on Color {
HSLColor get hsl => HSLColor.fromColor(this);
Color withSaturation(double saturation) {
return hsl.withSaturation(clampDouble(saturation, 0.0, 1.0)).toColor();
}
Color withLightness(double lightness) {
return hsl.withLightness(clampDouble(lightness, 0.0, 1.0)).toColor();
}
Color withHue(double hue) {
return hsl.withHue(clampDouble(hue, 0.0, 360.0)).toColor();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.