flutter 如何在“抖动”中更改颜色的色调、饱和度或值?

ulydmbyx  于 2023-01-06  发布在  Flutter
关注(0)|答案(4)|浏览(258)

假设我在Flutter中有一个Color对象,我想改变它的色调、饱和度、亮度或明度,我该怎么做呢?
谢啦,谢啦

vyu0f0g1

vyu0f0g11#

您可以使用这些帮助器方法来更改它。

  • newHueValue:具有0和360之间的任意双精度
  • newSaturationValue:具有0和1之间的任意双精度
  • newLightnessValue:带有0和1之间的任意双精度
Color 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

w1jd8yoj

w1jd8yoj2#

有几种方法可以做到这一点
1.大多数色板的颜色从100到900,增量为 * 一百 *,再加上颜色50。数字越小,颜色越浅。数字越大,颜色越深。重点色板(例如redAccent)的值只有100,200,400700
示例Color selection = Colors.green[400]; // Selects a mid-range green.
示例调色板x1c 0d1x
此外,还有一系列不透明度常见的黑色和白色可供选择,例如black 54是一种不透明度为54%的纯黑色。
其它着色方法是
computeLuminance() → double返回介于0(最暗)和1(最亮)之间的亮度值。
toString() → String返回此对象的字符串表示形式。
withAlpha(int a) → Color返回与此颜色匹配的新颜色,并将Alpha通道替换为a(范围从0到255)。
withBlue(int b) →颜色返回与此颜色匹配的新颜色,其中蓝色通道替换为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)。

wko9yo5t

wko9yo5t3#

除了@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();
}
mzaanser

mzaanser4#

也可以使用扩展方法:

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();
  }
}

相关问题