如何将 DWORD RGBA 转换为整数?

2023-12-05

我必须将 DWORD(无符号长整型)RGBA 转换为四个 int 变量(R、G、B 和 A) 到目前为止,我有这个函数将 4 个整数转换为 DWORD:

unsigned long RGBA2DWORD(int iR, int iG, int iB, int iA)
{
    return ((iA << 24) | (iR << 16) | (iG << 8) | iB);
}

我怎样才能把它转换回来?

就像是

struct RGBA
{
    int R, G, B, A;
};

RGBA DWORD2RGBA(unsigned long dwColor)
{
    static RGBA tmp;
    //.......conversion process
    return tmp;
}

任何形式的帮助将不胜感激! :)

Thanks


如果我是你,我会坚持在打包/解包函数中使用乘加运算。像这样的东西

unsigned long RGBA2DWORD(int iR, int iG, int iB, int iA)
{        
  return ((iA * 256 + iR) * 256 + iG) * 256 + iB;
}

具有对称拆包功能

RGBA DWORD2RGBA(unsigned long dwColor)
{        
  RGBA tmp; /* why did you declare it static??? */

  tmp.B = dwColor % 256; dwColor /= 256;
  tmp.G = dwColor % 256; dwColor /= 256;
  tmp.R = dwColor % 256; dwColor /= 256;
  tmp.A = dwColor % 256; /* dwColor /= 256; */

  return tmp;
}

请注意,整个代码中只有一个“魔法常量”。

当然,如果您有一个按照打包数据中的位模式编写的外部规范,那么基于位和移位操作的版本可能会更好。仍然

unsigned long RGBA2DWORD(int iR, int iG, int iB, int iA)
{        
  return (((((iA << 8) + iR) << 8) + iG) << 8) + iB;
}

RGBA DWORD2RGBA(unsigned long dwColor)
{        
  RGBA tmp; /* why did you declare it static??? */

  tmp.B = dwColor & 0xFF; dwColor >>= 8;
  tmp.G = dwColor & 0xFF; dwColor >>= 8;
  tmp.R = dwColor & 0xFF; dwColor >>= 8;
  tmp.A = dwColor & 0xFF; /* dwColor >>= 8; */

  return tmp;
}

具有更少的“魔法常数”。

现在,您可以将重复的操作/子表达式包装在宏中,或者更好的是,内联函数中,并获得非常紧凑且可读的打包器/解包器。

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

如何将 DWORD RGBA 转换为整数? 的相关文章

  • WinForms:如何确定窗口是否不再活动(没有子窗口具有焦点)?

    我的应用程序使用多个窗口 我想隐藏一个特定窗口 以防应用程序失去焦点 当活动窗口不是应用程序窗口时 source https stackoverflow com questions 466354 how can i tell if a wi
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • C++:重写已弃用的虚拟方法时出现弃用警告

    我有一个纯虚拟类 它有一个纯虚拟方法 应该是const 但不幸的是不是 该接口位于库中 并且该类由单独项目中的其他几个类继承 我正在尝试使用这个方法const不会破坏兼容性 至少在一段时间内 但我找不到在非常量方法重载时产生警告的方法 以下
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl
  • JSON 数组到 C# 列表

    如何将这个简单的 JSON 字符串反序列化为 C 中的列表 on4ThnU7 n71YZYVKD CVfSpM2W 10kQotV 这样 List
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • Azure 事件中心 - 按顺序接收事件

    我使用下面的代码从 Azure Event Hub 接收事件 https learn microsoft com en us azure event hubs event hubs dotnet framework getstarted s
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 如何一步步遍历目录树?

    我发现了很多关于遍历目录树的示例 但我需要一些不同的东西 我需要一个带有某种方法的类 每次调用都会从目录返回一个文件 并逐渐遍历目录树 请问我该怎么做 我正在使用函数 FindFirstFile FindNextFile 和 FindClo
  • System.Runtime.InteropServices.COMException(0x80040154):[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 C 项目中遇到异常 System Runtime InteropServices COMException 0x80040154 检
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • WinRT 定时注销

    我正在开发一个 WinRT 应用程序 要求之一是应用程序应具有 定时注销 功能 这意味着在任何屏幕上 如果应用程序空闲了 10 分钟 应用程序应该注销并导航回主屏幕 显然 执行此操作的强力方法是在每个页面的每个网格上连接指针按下事件 并在触
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • ASP.NET MVC网站从磁盘读取文件问题

    我正在阅读一个文本文件 其中包含在我正在处理的 MVC 网站中使用 C 的 SQL 插入语句 调试我正在使用的函数时工作正常并且插入发生 但是 一旦我发布该网站并在本地计算机上运行它 甚至将 IIS 设置为使用 asp net 4 0 它似
  • Shopify 中的内容安全违规

    我正在使用 Shopify 并向不同的服务器发出 ajax get 请求 我刚刚实现了它 所以我正在控制台上测试它 请求正在通过 我得到了我想要的响应 但我也收到以下消息 仅限报告 拒绝连接到 https myurl com ApiClie
  • s3- boto- 按上传时间列出存储桶内的文件

    我需要每小时从 s3 服务器下载 100 个最新文件 bucketList bucket list PREFIX 上面的代码创建了文件列表 但它不依赖于文件的上传时间 因为它是按文件名列出的 我对文件名无能为力 它是随机给出的 Thanks
  • Cuda 5.0 链接问题

    我只是想使用 cuda 5 0 预览版构建我的一个旧项目 链接时出现错误 告诉我找不到某些 cuda 函数 例如 undefined reference to cudaMalloc 我的链接命令包括以下 cuda 选项 L usr loca
  • 单击可折叠项时 jQuery Mobile 页面跳转到顶部

    我有一个带有面板导航的 jQuery Mobile 页面 最后两个元素可与其他菜单项折叠 展开或折叠这些会导致页面跳转到顶部 并且用户必须再次向下滚动才能选择显示的条目之一 我试图通过执行来抑制这种行为 preventDefault 在可折
  • 消除 Windows 中可执行文件的“发布者未经验证”警告

    我已经为 Windows 创建了一个应用程序 每次通过打开可执行文件运行该应用程序时 我都会在 Windows 中收到 发布者未经验证 警告 如果我是这个应用程序的唯一受众 那很好 但事实并非如此 有什么方法可以对我的应用程序进行编程 以便
  • D3.csv 未从本地 csv 文件加载数据

    I created a copy of the csv file in my local folder because i wanted to mess around with the data a little bit When i ge
  • 如何在 SQL Server 2005 中的一条语句中更新两个表?

    我想一次性更新两张表 如何在 SQL Server 2005 中执行此操作 UPDATE Table1 Table2 SET Table1 LastName DR XXXXXX Table2 WAprrs start stop FROM T
  • React - TypeError:无法读取未定义的属性(读取“params”)

    所以我收到一条错误消息 TypeError Cannot readproperties of undefined reading params TypeError Cannot read properties of undefined re
  • 声明多维数组时出现堆栈溢出异常

    一般来说 我对编程有点陌生 并且在声明 3D 和 4D 数组时遇到了问题 我在主函数的开头有几个这样的声明 但我已将问题范围缩小到这 4 个 string reg perm mark name 64 64 64 short reg perm
  • 按 data.frame 中连续年份的子集

    我在 R 中有一个 data frame data table 如下 df lt data frame ID c rep A 20 year c 1968 1971 1972 1973 1974 1976 1978 1980 1982 19
  • Laravel OrderBy 关系计数

    我正在尝试获取最受欢迎的黑客马拉松 这需要按相应的黑客马拉松进行排序partipants gt count 抱歉 如果这有点难以理解 我有一个具有以下格式的数据库 hackathons id name hackathon user hack
  • 获取应用程序上下文返回 null

    以下模式被认为是从我的 Android 应用程序中的任何位置获取应用程序上下文的方法 但有时做MyApp getContext 返回空值 我尝试通过删除来更改架构static from getContext 这样我会做MyApp getIn
  • GZipStream 正在切断 XML 的最后一部分

    我创建了一个名为 AddGZip 的扩展方法 如下所示 public static void AddGZip this HttpResponse response response Filter new GZipStream respons
  • WCF 客户端使用证书和用户名/密码凭据?

    我正在使用 ASP NET 公司内部的 Web 服务 我使用 svcutil exe 连接到服务并从 wsdl 生成绑定和类 我可以连接到开发版本 该版本不需要身份验证 现在我们正在增加安全性 我的新 URI 使用 https 但还需要用户
  • 要列出的结果集

    我想用我的数据库字段值创建一个列表 有 2 列 名字和姓氏 我想创建一个列表 将名称列中的所有名称存储在字段中 然后添加到我的 DTO 中 这可能吗 您可以遵循的步骤 首先你需要有一个List
  • WinRT C# - 创建转换器字符串到字符串以绑定 Gridview

    今天我来找你是为了一个 小 问题 我不知道如何创建一个简单的转换器 因为这是第一次 而且我没有找到一个简单的例子 我想为 gridview 绑定创建一个 字符串到字符串 转换器 这是针对图像源的 我从一个对象中获取一个字符串 这是图像的名称
  • 如何保持 sql 依赖关系达到其目的

    我有一个控制台应用程序 我想继续观察数据库表中特定列的变化 我通过互联网阅读 发现 sql 依赖关系很适合我的目的 我开始了解它并做了以下事情 创建一个类 在构造函数中 我调用了静态函数start我调用了一个具有所有 sql 依赖项设置的函
  • 如何使用 Perl 查找和替换 XML 中的文本?

    我的 XML 文件看起来像这样
  • 如何将 DWORD RGBA 转换为整数?

    我必须将 DWORD 无符号长整型 RGBA 转换为四个 int 变量 R G B 和 A 到目前为止 我有这个函数将 4 个整数转换为 DWORD unsigned long RGBA2DWORD int iR int iG int iB