我有一个应用程序可以逐行绘制数据到X11显示器,其中每一行真的由不同颜色的像素组成。
我是通过使用XImage*
将数据数组映射到XCreateImage
来实现的。然后,在处理数据时,我使用红色,绿色和蓝色值填充XColor
变量,并调用XAllocColor
来分配颜色。然后我将像素值分配给数据数组中的相应元素。设置完所有数据后,我使用XPutImage
绘制线条。
在Linux上运行显示器时,一切看起来都很棒,完全符合预期。但是,当我通过ssh将X11显示器转发到Windows时,颜色都搞砸了。
有什么想法吗?
修改
如果我不使用XCreateImage
和XPutImage
并使用我想要的forground颜色创建GC
,并使用XDrawPoint
,则效果很好。似乎是XImage
的问题,或者在使用GC
时会自动解决问题。
答案 0 :(得分:0)
我找到了一个解决方案。问题似乎源于Windows如何处理颜色与Linux。 Windows存储颜色BGR和BGRA,其中Linux存储颜色RGB和ARGB。因此,每当显示器进入Windows时,我需要在调用XAllocColor
之前交换红色和蓝色值,之后,我需要将pixel
的{{1}}元素乘以256将颜色移过alpha分量。
有一些与此相关的问题:
因此,我实际上是在我的编辑中建议的方法,只做了一些修改。主要是,我为初始化时计划使用的每种颜色创建XColor
,因此我可以根据需要查找它们,而不是每次都创建它们。与使用GC
相比,这可以使性能保持合理。