当前位置: 首页 > 知识库问答 >
问题:

基于背景图像的文本颜色变换

魏凡
2023-03-14

我想改变文本(和图标)的颜色基于背景图像的可见性。

我尝试过:使用palette_generator包检查背景图像的主要颜色,并使用flutter_statusbarcolor包中的WhiteForGroundForColor函数(返回一个bool)为我的文本(和图标)颜色选择黑色或白色。

问题是:有时主色变成空。在我的测试中,这种情况发生在黑色和白色,我不知道有什么方法可以找出哪一种。

Future<bool> useWhiteTextColor(String imageUrl) async {
  PaletteGenerator paletteGenerator =
      await PaletteGenerator.fromImageProvider(
    NetworkImage(imageUrl),

    // Images are square
    size: Size(300, 300),

    // I want the dominant color of the top left section of the image
    region: Offset.zero & Size(40, 40),
  );

  Color dominantColor = paletteGenerator.dominantColor?.color;

  // Here's the problem 
  // Sometimes dominantColor returns null
  // With black and white background colors in my tests
  if (dominantColor == null) print('Dominant Color null');

  return useWhiteForeground(dominantColor);
}

我为其他语言找到了其他方法,但我不知道在Dart中实现相同方法的方法。

附加注意:我的实际代码包括一些附加的并发症。我使用的是一个SliverAppBar,这里我想确定flexibleSpace扩展时的标题和图标颜色。我改变他们的颜色,当崩溃时,在社区的帮助下,基于这一点。

共有2个答案

危璞
2023-03-14

我用下面的方法来找出要用哪一个(黑的或者白的)。

Color getTextColor(Color color) {
int d = 0;

// Counting the perceptive luminance - human eye favors green color...
double luminance =
    (0.299 * color.red + 0.587 * color.green + 0.114 * color.blue) / 255;

if (luminance > 0.5)
  d = 0; // bright colors - black font
else
  d = 255; // dark colors - white font

return Color.fromARGB(color.alpha, d, d, d);   }
高晋
2023-03-14

color类已经有一个计算亮度的方法,称为computeLuminance()

Color textColor = color.computeLuminance() > 0.5 ? Colors.black : Colors.white;
 类似资料:
  • 问题内容: 假设我要在CSS中渲染箭头,箭头应具有头部,尾部和灵活的宽度,以便可以包含文本。我当然可以创建多个div来获得所需的内容,但是如何在CSS3中完成呢? 我可以使用多个背景图片: 的HTML: 这给了我一个带有箭头和尾巴的透明中间部分。似乎不可能在中间部分指定颜色。 仅使用一张背景图像,您可以执行以下操作: 我知道这在很多方面都是可行的,但是背景颜色属性是否真的从速记定义中丢失了? 问题

  • 在超文本标记语言中,我什么时候使用颜色,背景颜色和背景标签有什么区别? 有什么区别?

  • 本文向大家介绍怎么改变选中文本的文字颜色和背景色?相关面试题,主要包含被问及怎么改变选中文本的文字颜色和背景色?时的应答技巧和注意事项,需要的朋友参考一下 ::selection { background-color: #222; color: white; }

  • background(int $color, int $pattern = self::PATTERN_SOLID): self int $color $format = new \Vtiful\Kernel\Format($fileHandle); ​ $backgroundStyle = $format->background( \Vtiful\Kernel\Format::COLO

  • 问题内容: 我有一个DIV,我想放置一个图案作为背景。此图案是灰色的。为了使它更好一点,我想在上面放一个透明的颜色“层”。以下是我尝试过的方法,但是没有用。有没有办法将彩色图层放在背景图像上? 这是我的CSS: 问题答案: 这里是: 对此的HTML: 当然,如果其中没有其他元素,则需要为该类定义宽度和高度

  • 本文向大家介绍Opencv图像处理之轮廓外背景颜色改变,包括了Opencv图像处理之轮廓外背景颜色改变的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Opencv轮廓外背景颜色改变的具体代码,供大家参考,具体内容如下 自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素 首先,头文件,写的比较多,没用的可以自己去除 主函数 回调函数 以上就是本文的全部内