_NET_WM_ICON 的图片格式

2023-12-19

环境:Ubuntu 16.04

在我的应用程序中,我通过调用获取应用程序的图标XGetWindowProperty with _NET_WM_ICON atom.

unsigned char* data;
XGetWindowProperty(..., &data);
unsigned long* data1 = (unsigned long*) data;
long width = *data1;
long height = *(data1 + 1)
unsigned char* imageData = (unsigned char*) (data1 + 2);

以下是返回数据的规格:

https://specations.freedesktop.org/wm-spec/wm-spec-1.3.html#idm140130317554480 https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html#idm140130317554480

根据规范,返回的图像必须是packed-32 ARGB格式。然而,我得到的图像似乎不正确。我终于用自己的图标创建了一个测试应用程序。它是一个实心图标,RGB 值分别为 0x20、0x40 和 0x80。

当我检查我的变量时imageData在调试器中,我看到的是:

0x80, 0x40, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff (repeat the pattern)

看起来格式是 BGRA,带有额外的四个字节填充。

如果有人能解释这种差异,我将不胜感激。问候。


来自XGetWindowProperty(3)CentOS 7 的手册页,这是指您要为其传递参数的参数data:



       prop_return
                 Returns the data in the specified format.  If the returned
                 format is 8, the returned data is represented as a char
                 array. If the returned format is 16, the returned data is
                 represented as a array of short int type and should be cast
                 to that type to obtain the elements. If the returned format
                 is 32, the property data will be stored as an array of longs
                 (which in a 64-bit application will be 64-bit values that are
                 padded in the upper 4 bytes).
  

我想你会发现actual_format_return是 32 (因为规范似乎表明这是唯一有效的格式_NET_WM_ICON),并且大概您的应用程序是 64 位的,这意味着您的long类型是 64 位长,因此需要填充。

至于为什么padding位全部设置为1代替0, 我不确定。手册页中的函数签名显示unsigned char **prop_return,但上面引用的文本说它是一个“长整型数组”,而不是“无符号长整型数组”,所以这可能是按字面意思理解的(或者是由您所在图标的应用程序的作者按字面意思理解的)检索),并且在您的应用程序接收数据之前,某些符号扩展已发生。

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

_NET_WM_ICON 的图片格式 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 3d 矩阵 R 的平均值

    我有一个像这样的 3d 数组 datamonth lt array 0 dim c length LONG length LATG length YEAR gt dim datamonth 1 361 181 30 其中前两个维度是经度和纬
  • ROW_NUMBER() PARTITION BY ORDER BY 等效项的 DAX 表达式

    我有一个这样的SQL语句 ROW NUMBER OVER PARTITION BY a market MEASURE TYPE ORDER BY AM REP ORDER KEY AS ORDER KEY 我想写一个DAX来实现上面的SQL
  • pybrain:如何打印网络(节点和权重)

    最后我设法从文件中训练一个网络 现在我想打印节点和权重 尤其是权重 因为我想用 pybrain 训练网络 然后在其他地方实现一个神经网络来使用它 我需要一种方法来打印层 节点和节点之间的权重 以便我可以轻松复制它 到目前为止 我看到我可以使
  • Helm 动态设置 Docker 镜像标签

    我使用以下命令通过 Jenkins 将 Docker 镜像推送到我们的私有注册表 def dockerImage docker build repo myapp env BUILD NUMBER BUILD NUMBER每次构建后都会增加
  • 带进度条报告的stream.copyto

    我想合并 2 个大文件 但 atm 我的代码仅在复制 1 个文件后更新进度是否有更好的方法来报告进度这是我的复制代码 atm max files Count MessageBox Show Merge Started using Strea
  • 在 .NET DrawString 中换行时禁用断字

    我正在使用 NET 将字符串绘制到有限的空间中 我希望字符串尽可能大 我对字符串分成更多行没有问题 如果它留在矩形内 现在的问题是 我不希望 NET 在单词中间的不同行中断开字符串 例如 字符串 Test 以大字体打印在一行上 字符串 Te
  • Android 项目错误任务 ':transformClassesWithJarMergingForDebug' 执行失败

    我正在将我的 Android 应用程序从 Eclipse 转换为 Android Studio 当我构建 gradle 时没有错误 但在运行应用程序时 我遇到了以下错误 Error Execution failed for task tra
  • 来自 Firefox 的 ajax 调用未加载 SSL 客户端证书

    我正在从 HTTP 页面执行 CORS 请求 其中包括对另一个 HTTPS 服务器的 JQuery ajax 调用 该服务器向客户端请求 SSL 客户端证书 因此 ajax 查询需要提供它 在 Chrome 35 中 一切都按预期工作 并且
  • 如何为表面着色以具有更强的对比度

    在Matlab中 我尝试使用以下代码在2维欧几里得空间上绘制一个函数 s 05 x 2 s 2 s y 1 s 3 s X Y meshgrid x y Z 1 X 2 100 Y X X 2 surf X Y Z colormap jet
  • 当 php 应用程序位于 Varnish 后面时使用 Xdebug

    我正在尝试使用 PHPStorm 将 Xdebug 远程调试设置为位于 Varnish 后面的站点作为缓存层 Varnish 作为端口 80 上的前端 Apache 作为端口 8080 上的后端与之通信 如果我绕过 Varnish 并直接与
  • 评估“可变变量”

    我正在使用以下内容创建一个动态变量 PHP 术语中的 变量变量 foo test1 set to word rejoin foo result data array 5 但是如何动态获取名为 test1 result data 的结果变量的
  • 如何使用 Modernizr 使 border-radius 在 IE8 中工作?

    我知道有很多关于在 IE8 中获取圆角的文章 我的问题是 如何使用Modernizr支持CSS3 HTML5功能 例如 为了在 IE8 中显示圆角 我使用 CSS 3 属性 webkit border radius 20px moz bor
  • 如何在React Native Android中添加自定义字体

    我想设置fontFamily到 roboto 精简我的工具栏标题 我已经添加了roboto Thin ttfassets fonts我的 android 项目的文件夹 但是它似乎在运行应用程序时产生问题 我在运行时遇到这个问题 反应本机启动
  • java cpu使用率监控

    有没有办法使用纯Java来监控CPU使用率 kgiannakakis 链接的文章评论中有一个宝石 javasysmon https github com jezhumble javasysmon wiki JavaSysMon 管理进程和
  • Discord.js V13 发送消息附件

    升级到discord js v13并使用后Array from message attachments values 代替message attachments array 发送消息中的附件 message client channels
  • AWS API Gateway 缓存忽略查询参数

    我正在 AWS API Gateway 端配置缓存以提高 REST API 的性能 我尝试配置的端点正在使用查询参数 我已经在 AWS API Gateway 端启用了缓存 但不幸的是 我发现它在构建缓存键时忽略了查询参数 例如 当我使用查
  • 如何启用 Guard Malloc

    这是一个愚蠢的问题 文档说 要使用 Guard Malloc 启用调试 请在运行项目之前在 Xcode 中选择 运行 gt 启用 Guard Malloc 选项 启用此选项后构建并运行您的应用程序会自动使用 Guard Malloc 库运行
  • 默认 MVC 5 应用程序的安全异常

    将 VS 2013 生成的默认 MVC 5 应用程序部署到我的托管帐户时 我遇到了安全异常 对于这个问题有什么快速的解决办法吗 Description The application attempted to perform an oper
  • Yii2:在字段模糊时禁用 ActiveForm Ajax 验证

    如何自动禁用 Yii validation onblur ajax 验证 我只想在按下提交按钮后进行验证 您想使用enableAjaxValidation验证您的表单 同时不希望在每个表单上触发 ajax 验证blur当您输入该字段后 您只
  • _NET_WM_ICON 的图片格式

    环境 Ubuntu 16 04 在我的应用程序中 我通过调用获取应用程序的图标XGetWindowProperty with NET WM ICON atom unsigned char data XGetWindowProperty da