GDI + проблема дизеринга - PullRequest
4 голосов
/ 18 декабря 2008

У меня есть приложение C ++, использующее Win32 API для Windows, и у меня возникла проблема с GDI + дизеринг, когда я не знаю, почему это так.

У меня есть пользовательский элемент управления (пользовательское окно). Когда я получаю сообщение WM_PAINT, я рисую несколько полигонов, используя FillPolygon на графическом устройстве. Это графическое устройство было создано с использованием HDC от BeginPaint.

Однако, когда многоугольники появляются на экране, они размыты, а не прозрачны, и, кажется, показывают только несколько цветов (возможно, 256?). Когда я делаю то же самое в C # с использованием интерфейса .NET в GDI +, это работает хорошо, что заставляет меня задуматься о том, что происходит.

Я не делаю ничего особенного, это простой пример, который, насколько я знаю, должен работать нормально. Я что-то не так делаю?

Редактировать: Бессмысленно. Это происходит только через удаленный рабочий стол, хотя в примере C # не происходит дизеринг по удаленному рабочему столу. Удаленный рабочий стол настроен на 32-битный цвет, поэтому я не знаю, что с этим.

Ответы [ 2 ]

0 голосов
/ 04 января 2009

Хмм ... Возможности наполнения определяются целевым устройством. При работе через удаленный рабочий стол AFAIK Windows заменяет драйвер дисплея, чтобы можно было изменять поддерживаемые функции дисплея.

  1. при рисовании на wm_paint вы фактически рисуете прямо на поверхности экрана, в то время как .net обычно использует двойную буферизацию (рисует в битовой карте памяти, а затем копирует всю битовую карту)
  2. В gdi + есть некоторые настройки, которые влияют на качество рисования. может быть есть разные настройки по умолчанию для экранной, закадровой и удаленной рисования?
0 голосов
/ 18 декабря 2008

Это происходит только через удаленный рабочий стол

Многие удаленные приложения уменьшают глубину цвета, чтобы снизить требования к пропускной способности. Хотя я не использовал удаленный рабочий стол, то же самое происходит с некоторыми подключениями VNC. Я бы проверил настройки вашего RD-сервера и клиента.

...