繁体   English   中英

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

[英]Color issues when forwarding X11 display to Windows

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

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

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

有任何想法吗?

编辑

如果我不使用XCreateImageXPutImage并使用XCreateImage XPutImage创建GC ,并使用XDrawPoint ,则效果很好。 似乎与XImage或者使用GC时,该问题已自动解决。

我找到解决方案。 问题似乎源于Windows与Linux相比如何着色。 Windows存储BGR和BGRA颜色,而Linux存储RGB和ARGB颜色。 因此,无论何时将显示器转到Windows,我都需要在调用XAllocColor之前交换Red和Blue值,之后,我需要将XColorpixel元素乘以256,以将颜色移到alpha分量之外。

有一些与此相关的问题:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM