gpt4 book ai didi

windows - 将 X11 显示转发到 Windows 时出现颜色问题

转载 作者:可可西里 更新时间:2023-11-01 10:50:32 25 4
gpt4 key购买 nike

我有一个应用程序可以逐行绘制数据到 X11 显示器,其中每条线实际上都由不同颜色的像素组成。

我通过使用 XCreateImage 将数据数组映射到 XImage* 来实现这一点。然后在处理数据时,我用红色、绿色和蓝色值填充 XColor 变量,并调用 XAllocColor 来分配颜色。然后我将像素值分配给数据数组中的相应元素。设置好所有数据后,我使用 XPutImage 绘制线条。

在 Linux 上运行显示时,一切看起来都很棒,完全符合预期。但是,当我通过 ssh 将 X11 显示转发到 Windows 时,颜色全乱了。

有什么想法吗?

编辑

如果我不使用 XCreateImageXPutImage 并使用我想要的前景色创建一个 GC,并使用 XDrawPoint,它工作得很好。似乎是 XImage 的问题,或者使用 GC 时问题会自动解决。

最佳答案

我找到了 解决方案。问题似乎源于 Windows 与 Linux 相比如何处理颜色。 Windows 存储颜色 BGR 和 BGRA,而 Linux 存储颜色 RGB 和 ARGB。因此,无论何时显示器进入 Windows,我都需要在调用 XAllocColor 之前交换红色和蓝色值,之后我需要乘以 pixel 元素>XColor 256 以将颜色移过 alpha 分量。

与此相关的一些问题:

  1. 应用程序无法判断显示是在 Linux 还是 Windows 上呈现,所以我使用环境变量进行测试
  2. 这仅适用于 Windows 上的 32 位屏幕深度,如果深度仅为 24 位,请忽略乘以 256,小于我不知道的数

因此,我实际上是按照我在编辑中建议的方法进行一些修改。主要是,我为我计划在初始化期间使用的每种颜色创建一个 GC,因此我可以根据需要查找它们,而不是每次都创建它们。与使用 XImage 相比,这可以合理地保持性能。

关于windows - 将 X11 显示转发到 Windows 时出现颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com