如何在C中将RGB转换为HSL?

2024-04-21

如何在 C/C++ 中将 RGB 转换为 HSL?

(Note: This is a (short) self-answer -- I posted it here so people can find it quickly with a search.)


翻译代码来自here http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c, 你得到:

// Assuming sizeof(unsigned int) == 4 * sizeof(unsigned char)
unsigned int RgbToHsl(unsigned int rgb)  // Alpha value is simply passed through
{
#ifdef __cplusplus
    using std::max;
    using std::min;
#endif
    double
        r = (rgb >> (0 * CHAR_BIT)) & UCHAR_MAX,
        g = (rgb >> (1 * CHAR_BIT)) & UCHAR_MAX,
        b = (rgb >> (2 * CHAR_BIT)) & UCHAR_MAX;
    r /= UCHAR_MAX;
    g /= UCHAR_MAX;
    b /= UCHAR_MAX;
    double
        maxv = max(max(r, g), b),
        minv = min(min(r, g), b),
        h = 0, s = 0, d = maxv - minv,
        l = (maxv + minv) / 2;
    if (maxv != minv)
    {
        s = l > 0.5 ? d / (2 - maxv - minv) : d / (maxv + minv);
        if (maxv == r) { h = (g - b) / d + (g < b ? 6 : 0); }
        else if (maxv == g) { h = (b - r) / d + 2; }
        else if (maxv == b) { h = (r - g) / d + 4; }
        h /= 6;
    }
    return ((unsigned int)(h * UCHAR_MAX) << (0 * CHAR_BIT)) |
           ((unsigned int)(s * UCHAR_MAX) << (1 * CHAR_BIT)) |
           ((unsigned int)(l * UCHAR_MAX) << (2 * CHAR_BIT)) |
           (((rgb >> (3 * CHAR_BIT)) & UCHAR_MAX) << (3 * CHAR_BIT));
}

假设顺序为 RGBA,其中 R 是最低有效字节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C中将RGB转换为HSL? 的相关文章

随机推荐

  • 在SPARQL中使用LIMIT时如何获取结果总数?

    我有一个 SPARQL 查询 它返回结果LIMIT共 20 个 在此查询中 我还想知道结果总数 而无需运行查询两次 一次运行LIMIT和一个没有LIMIT 例如 运行查询时 可能的结果总数为 500 个 其中LIMIT它一次只显示 20 个
  • 如何发送元数据 HTTP POST 请求

    假设我想发送这些类型的请求 其中 json 数据中有 meta 我该如何处理 我把它作为 json 数据 amount 500 narration Test Int l bank transfers currency USD benefic
  • 如何启动一个新的大型 ZF2 项目?

    我将使用 ZF2 创建一个新项目 事实上 我必须升级 ZF1 项目 但我决定从头开始 我的项目非常庞大 已经被来自世界各地的志愿者翻译成 10 种不同的语言 我遇到的困难是分析 ZF2 告诉我要遵循的模块结构 该软件允许 ISP 领域的中小
  • 如何使用 Selenium 找到文本位置?

    我正在尝试使用 Selenium 查找网页上某些文本的位置 我可以使用 isTextPresent 函数来告诉我文本是否出现 但随后我想知道它实际在哪里 更广泛的问题是我想单击此文本 问题是我似乎无法单击此文本 我认为该文本位于页面上嵌入的
  • sqlalchemy中查询相关表

    所以我有两个表 员工 和 详细信息 如下所示 class Employee Base tablename employees id Column Integer Sequence employee id seq primary key Tr
  • 如何在 ASP.NET 5 中使用基于 IAppBuilder 的 Owin 中间件

    ASP NET 5 ASP NET vNext 与 Katana 一样基于 OWIN 但具有不同的抽象 尤其IAppBuilder已被替换为IApplicationBuilder 许多中间件库依赖于IAppBuilder并且尚未更新以支持
  • 使用多个条件查找所有结果

    我有一个包含多列的表 我想使用条件过滤表并接收包含匹配项的范围 1 我知道我可以使用循环轻松地在表中进行迭代 或者 2 我可以在列中添加过滤器 我不喜欢 1 因为表中的迭代太慢 但我可以做到这一点 Excel 是否有一种函数可以一步返回按特
  • BigQuery更新如何获取更新的行数

    我正在使用 Google Cloud Functions 连接到 Google Bigquery 数据库并更新一些行 云函数是使用Python 3编写的 当我通过函数运行更新 dml 时 我需要帮助弄清楚如何获取结果消息或更新 更改的行数
  • dplyr 0.3 无法inner_join data.table?

    我有以下设置并加载了 dplyr 0 3 和 data table 1 9 3 R version 3 1 1 2014 07 10 Platform x86 64 apple darwin10 8 0 64 bit locale 1 en
  • 是否可以直接从文件加载镶木地板表?

    如果我有一个二进制数据文件 可以转换为 csv 格式 有什么方法可以直接从中加载镶木地板表吗 许多教程显示将 csv 文件加载到文本表 然后从文本表加载到镶木地板表 从效率的角度来看 是否可以像我已有的那样直接从二进制文件加载镶木地板表 理
  • Android html5 输入 type="password" 和数字键盘

    我的任务是为 Android 和 iOS 设计一个网页 您应该在其中输入您的信用卡信息 我无法获取在 Android 中打开数字键盘的安全代码字段 这是我距离最近的一次 它适用于 iOS 但不适用于 Android
  • 用三种颜色的渐变填充面板

    我正在做一个项目 我必须使用 C 做一种颜色选择器 所以我决定在 Win Forms 应用程序中建立一个具有此背景的面板 背景应具有 RGB 三种颜色的渐变 红色 0 255 蓝色 0 255 和绿色 0 但我找不到任何关于我应该为此使用什
  • 模板组件启动器内的离子标签组件未渲染

    我克隆了stencil component starter from https github com ionic team stencil component starter https github com ionic team ste
  • Android 上未原生找到 RNFirebase 核心模块

    我正在尝试在 Android 平台上运行现有的 React Native 应用程序 但收到如下图所示的错误 我已经执行了下面提到的所有步骤http invertase link android http invertase link and
  • Ionic2 - 如果超时则取消 Api 请求

    在我的应用程序中 我通过表单保存数据并调用 Api 进行相同的操作 为了检查它们的互联网连接是否缓慢 我在 ionic2 中使用超时 如下所示 savedata let headers new Headers headers set Con
  • 创建较慢的过渡。 TransitionManager.beginDelayedTransition();太快了

    我正在创建一个过渡 当单击按钮时 将执行以下方法 该方法改变了图像视图的大小和位置 并将其淡出 我在用TransitionManager beginDelayedTransition is too fast 放慢转变速度 但它仍然进展得太快
  • 为动态图像生成 CSS 精灵

    我有一个网页 其中包含大约 20 50 个动态图像 从非静态源提供的图像 这些图像通过基于请求 URL 的 servlet 提供 这会导致每个图像生成一个请求 从而导致性能下降 如果这些图像是静态的 我将创建一个 CSS 精灵并用一个请求替
  • 直线和水平线在断点处连接的分段回归

    我想做一个带有一个断点的分段线性回归 其中回归线的第二半有slope 0 有一些关于如何进行分段线性回归的示例 例如here https stackoverflow com questions 15874214 piecewise func
  • 如果我在 grails 中使用 groovy sql 类,它是否使用 grails 连接池?

    来自 sql 文档中的以下示例 如果我使用这两种方法之一在 Grails 服务类中创建 sql 实例 它会使用 Grails 连接池吗 它会参与任何交易功能吗 我需要自己关闭连接吗 还是会自动回到池子里 def db url jdbc hs
  • 如何在C中将RGB转换为HSL?

    如何在 C C 中将 RGB 转换为 HSL Note This is a short self answer I posted it here so people can find it quickly with a search 翻译代