2

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

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

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

有任何想法吗?

编辑

如果我不使用XCreateImageand并使用我想要的前景色XPutImage创建 a并使用,它就可以正常工作。似乎是一个问题,或者在使用.GCXDrawPointXImageGC

4

1 回答 1

0

我找到解决方案。问题似乎源于 Windows 如何处理颜色与 Linux。Windows 存储颜色 BGR 和 BGRA,而 Linux 存储颜色 RGB 和 ARGB。因此,每当显示器进入 Windows 时,我需要在调用之前XAllocColor和之后交换 Red 和 Blue 值,我需要将 的pixel元素乘以XColor256 以将颜色移过 alpha 分量。

有一些与此相关的问题:

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

因此,我实际上正在执行我在编辑中建议的方法,并进行了一些修改。主要是,我为我计划在初始化期间使用的每种颜色创建一个GC,因此我可以根据需要查找它们,而不是每次都创建它们。与使用XImage.

于 2011-03-25T13:04:41.660 回答