Проблемы с цветом при пересылке дисплея X11 в Windows - PullRequest
2 голосов
/ 23 марта 2011

У меня есть приложение, которое построчно отображает данные на дисплее X11, где каждая строка на самом деле состоит из пикселей разного цвета.

Я делаю это, сопоставляя массив данных с XImage*, используя XCreateImage.Затем, когда данные обрабатываются, я заполняю переменные XColor значениями красного, зеленого и синего цветов и вызываю XAllocColor, чтобы выделить цвет.Затем я назначаю значение пикселя соответствующему элементу в массиве данных.Когда все данные настроены, я строю линию, используя XPutImage.

. При запуске дисплеев в Linux все выглядит отлично, именно так, как и ожидалось.Однако, когда я пересылаю дисплей X11 на Windows через ssh, все цвета перепутались.

Есть идеи?

РЕДАКТИРОВАТЬ

Если яне используйте XCreateImage и XPutImage и создайте GC с нужным мне цветом переднего плана, а используйте XDrawPoint, он работает просто отлично.Кажется, проблема с XImage или проблема решается автоматически при использовании GC.

1 Ответ

0 голосов
/ 25 марта 2011

Я нашел решение. Кажется, проблема связана с тем, как Windows делает цвета по сравнению с Linux. Windows хранит цвета BGR и BGRA, где Linux хранит цвета RGB и ARGB. Таким образом, всякий раз, когда дисплей переходит в Windows, мне нужно поменять значения красного и синего перед вызовом XAllocColor, а после, мне нужно умножить элемент pixel в XColor на 256, чтобы сместить цвета за пределы альфы. компонент.

С этим связаны некоторые проблемы:

  1. Приложение не может определить, отображается ли экран в Linux или Windows, поэтому я использую переменную окружения для тестирования
  2. Это работает только для 32-битной глубины экрана в Windows, игнорируйте умножение на 256, если глубина только 24-битная, меньше, чем я не знаю

Из-за этого я на самом деле делаю метод, который я предложил в моем Edit с несколькими модификациями. В основном я создаю GC для каждого цвета, который планирую использовать во время инициализации, поэтому я могу просто искать их по мере необходимости, а не создавать их каждый раз. Это обеспечивает разумную производительность по сравнению с использованием XImage.

...