RGB 字节与 HSL 之间的转换?

2023-12-22

有没有RGB转换的算法byte数组到 HSLfloat阵列并再次返回?

我已经尝试过找到的那个here https://stackoverflow.com/questions/8838264但它似乎有错误。


我使用以下类从 HSL 转换为 RGB,反之亦然。你可以构造一个ColorRGB实例来自Color,或者简单地投射一个。它暴露了H, S, L属性也。我在互联网上找到了它。向原作者致歉,我找不到参考资料:

  public class ColorRGB
  {
    public byte R;
    public byte G;
    public byte B;
    public byte A;

    public ColorRGB()
    {
      R = 255;
      G = 255;
      B = 255;
      A = 255;
    }

    public ColorRGB(Color value)
    {
      this.R = value.R;
      this.G = value.G;
      this.B = value.B;
      this.A = value.A;
    }
    public static implicit operator Color(ColorRGB rgb)
    {
      Color c = Color.FromArgb(rgb.A, rgb.R, rgb.G, rgb.B);
      return c;
    }
    public static explicit operator ColorRGB(Color c)
    {
      return new ColorRGB(c);
    }


    // Given H,S,L in range of 0-1
    // Returns a Color (RGB struct) in range of 0-255
    public static ColorRGB FromHSL(double H, double S, double L)
    {
      return FromHSLA(H, S, L, 1.0);
    }

    // Given H,S,L,A in range of 0-1
    // Returns a Color (RGB struct) in range of 0-255
    public static ColorRGB FromHSLA(double H, double S, double L, double A)
    {
      double v;
      double r, g, b;
      if (A > 1.0)
        A = 1.0;

      r = L;   // default to gray
      g = L;
      b = L;
      v = (L <= 0.5) ? (L * (1.0 + S)) : (L + S - L * S);
      if (v > 0)
      {
        double m;
        double sv;
        int sextant;
        double fract, vsf, mid1, mid2;

        m = L + L - v;
        sv = (v - m) / v;
        H *= 6.0;
        sextant = (int)H;
        fract = H - sextant;
        vsf = v * sv * fract;
        mid1 = m + vsf;
        mid2 = v - vsf;
        switch (sextant)
        {
          case 0:
            r = v;
            g = mid1;
            b = m;
            break;
          case 1:
            r = mid2;
            g = v;
            b = m;
            break;
          case 2:
            r = m;
            g = v;
            b = mid1;
            break;
          case 3:
            r = m;
            g = mid2;
            b = v;
            break;
          case 4:
            r = mid1;
            g = m;
            b = v;
            break;
          case 5:
            r = v;
            g = m;
            b = mid2;
            break;
        }
      }
      ColorRGB rgb = new ColorRGB();
      rgb.R = Convert.ToByte(r * 255.0f);
      rgb.G = Convert.ToByte(g * 255.0f);
      rgb.B = Convert.ToByte(b * 255.0f);
      rgb.A = Convert.ToByte(A * 255.0f);
      return rgb;
    }

    // Hue in range from 0.0 to 1.0
    public float H
    {
      get
      {
        // Use System.Drawing.Color.GetHue, but divide by 360.0F 
        // because System.Drawing.Color returns hue in degrees (0 - 360)
        // rather than a number between 0 and 1.
        return ((Color)this).GetHue() / 360.0F;
      }
    }

    // Saturation in range 0.0 - 1.0
    public float S
    {
      get
      {
        return ((Color)this).GetSaturation();
      }
    }

    // Lightness in range 0.0 - 1.0
    public float L
    {
      get
      {
        return ((Color)this).GetBrightness();
      }
    }
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RGB 字节与 HSL 之间的转换? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern

随机推荐

  • 如何创建包含所有点的箱线图,其中对于每个组,可以手动分配点的颜色

    我有一个数据框 gt dput df2 structure list Genotype c miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16
  • 使用 ruby​​ gsub 和 regexp 进行更智能的字符替换

    我正在尝试为某些文章标题创建类似于永久链接的行为 但我不想为永久链接添加新的数据库字段 所以我决定编写一个助手 将我的文章标题从 O focoas a pornit cruciada mpotriva b rba ilor zg rci i
  • Composer 自动加载 - 找不到类

    我正在运行一个 Silex 小应用程序 试图让某种结构继续下去 这是我的composer json require silex silex 1 3 autoload psr 0 HelloWorld Controller src Hello
  • 进行布尔或可见性的最佳方法

    我有一个控件 仅当一系列属性中至少有一个返回 true 时 我才希望该控件可见 我正要实现我自己的 BooleanOrToVisibilityMultiConverter 但感觉必须有一个更好的 并且完全明显的 方法来做到这一点 请赐教 M
  • 如何声明 C# Web 用户控件但阻止其初始化?

    我有一个 C ASP NET aspx 页面 它声明了两个控件 每个控件代表一个选项卡的内容 我需要一个查询字符串参数 例如 tab 1 来确定激活两个控件中的哪一个 我的问题是 它们都经历初始化事件并填充其子控件 浪费 CPU 资源并减慢
  • 从外部禁用 Linux 程序的信号

    在 Linux 上 是否可以以某种方式禁用程序的信号发送外在地 也就是说 不修改他们的源代码 Context 我正在呼叫 C 还有一个Java 在 Linux 上的 bash 脚本中编写程序 我不希望我的 bash 脚本以及该脚本启动的其他
  • Angular 2 选择组件设置初始选择

    我正在尝试使用 ngModel 在 Angular 2 中创建一个选择组件包装器 一旦选择更改 所有事件都会正确触发 但我无法在渲染时设置初始选择 这是我的组件 Component selector my dropdown inputs s
  • 如何优化 SQLAlchemy 生成的这个查询?

    我有一个由 SQLAlchemy ORM 生成的查询 它应该检索特定课程的stream items 及其所有部分 资源 内容文本块等 以及发布它们的用户 然而 这个查询似乎非常慢 在我们的生产数据库上花费了几分钟的时间 数据库中有大约 20
  • HBase 单行事务支持中的行锁定

    在 HBase 中 为了提供单行事务支持 它使用行锁定概念 假设 例如 Put p new Put Row Key 该语句将锁定该行 所以 直到我们完成 表 put p 锁不会被释放 所以 在这之间 如果我开始一个新的看跌期权 即 Put
  • Google Colaboratory ImportError:libcublas.so.10.0:无法打开共享对象文件:运行时没有这样的文件或目录

    我正在关注这篇关于 Google Colaboratory 的人工智能农业的文章 https medium com deepquestai ai in agriculture detecting defects in apples b246
  • 如何在 Swift 3 中将文档目录中的图像显示到 UIImageView?

    下面的 Swift 2 示例给出了此错误 String 类型的值没有成员 stringByAppendingPathComponent 对于 Swift 3 我需要更改什么 Apple 正试图让所有人摆脱路径字符串范式 转向 URL 即fi
  • Response.Write() 是否可以与 Razor 一起使用?

    Response Write 是否可以与 Razor 一起使用 我尝试使用 Html RenderAction但我收到错误 CS1502 The best overloaded method match for Microsoft WebP
  • 如何在 WPF 中获取 ListView 的选中行值

    我有一个ListView在 WPF 应用程序中CheckBox 我想将所有选中行的值保存在 WPF 列表中 我怎样才能实现这个目标 我的列表视图
  • 使用自动布局“捏合缩放”

    我遵循了许多在网上找到的 捏合缩放 教程 并阅读了有关自动布局的内容 但我无法让它在我的项目中工作 我的整个项目都使用自动布局 所以我不想将其关闭 我正在将一个巨大的 UIImage 例如 长边 5000px 加载到 UIImageView
  • 在 swagger 中处理多个基本路径

    我正在使用 swagger ui 为我们的客户提供 REST API 的良好文档 在内部 我们有两个不同的 jenkin 构建项目的环境 例如 swagger json 可以在两种环境中访问 http www myhost com xyz
  • 如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?

    如何用简单的英语解释回调 它们与从另一个函数调用一个函数并从调用函数中获取一些上下文有何不同 如何向新手程序员解释它们的威力 我会尽量让这个问题变得简单 回调 是由另一个函数调用的任何函数 该另一个函数将第一个函数作为参数 很多时候 回调
  • Emberjs - 临时禁用属性更改通知

    是否有任何简单的方法可以实现临时禁用一个或多个对象属性的通知 我知道你可以推迟他们beginPropertyChanges and endPropertyChanges 但在我明确启用这些更改之前 我根本不希望收到这些更改的通知 先感谢您
  • 如何按自定义字段日期排序 WordPress 帖子?

    我正在制作一个事件侧边栏部分 仅显示接下来的 3 个事件 我已经让自定义帖子类型和自定义字段全部正常工作 但我似乎可以弄清楚如何按事件的开始日期 这是自定义字段值 对帖子进行排序 有没有一个php函数可以比较日期并将它们组织成一定的顺序 我
  • MeteorJS MongoDB 部署错误

    由于某种原因 当我使用 Meteor 部署时 我的服务器出现以下错误 并且我无法访问这些页面 我遇到以下错误 警告错误 没有可用于查询的副本集主副本 读取首选项主要 我正在使用 Meteor 1 1 0 2 并运行meteor deploy
  • RGB 字节与 HSL 之间的转换?

    有没有RGB转换的算法byte数组到 HSLfloat阵列并再次返回 我已经尝试过找到的那个here https stackoverflow com questions 8838264但它似乎有错误 我使用以下类从 HSL 转换为 RGB