Какая мотивация стоит за PixelOffsetModeHighSpeed ​​и PixelOffsetModeHighQuality? - PullRequest
0 голосов
/ 09 июня 2018

Я довольно много вручную рисую GDI + в C #, и меня всегда раздражало кажущееся (0,5, 0,5) смещение пикселей, которое GDI + использует по умолчанию (я думаю, что оно более совместимо с более простым определением IMO (0, 0)будучи верхним левым углом верхнего левого пикселя).До недавнего времени я думал, что это, вероятно, просто глупая вещь .NET, чтобы сделать вещи "" "проще" "" - я просто перевел (-0.5, -0.5), прежде чем делать что-то еще.Пока я не наткнулся на перечисление PixelOffsetMode.

.NET определение | Определение API C

typedef enum  {
  PixelOffsetModeInvalid       = QualityModeInvalid,
  PixelOffsetModeDefault       = QualityModeDefault,
  PixelOffsetModeHighSpeed     = QualityModeLow,
  PixelOffsetModeHighQuality   = QualityModeHigh,
  PixelOffsetModeNone          = QualityModeHigh + 1,
  PixelOffsetModeHalf          = QualityModeHigh + 2 
} PixelOffsetMode;

Кажется, что "off by (0.5, 0.5)" - это преднамеренная вещь GDI +.

Есть также эти 2 ответа наSO:

Поиск сведений о перечислении PixelOffsetMode в .Net, WinForms

Что такое PixelOffsetMode?

Ответна последний вопрос, похоже, тоже немного неверно.Нет никакой разницы между HighSpeed и Half (это режим, который помещает начало координат в верхний левый угол левого верхнего пикселя, и HighSpeed и None (который устанавливает начало координат в центрверхний левый пиксель). Документация определения перечисления C API даже подтверждает это.

Что меня больше всего беспокоит, так это то, что в двух опциях есть слова «Скорость» и «Качество», какое значение вы выбираетене имеет никакого отношения к скорости или качеству, это просто другое определение системы координат, используемой для рисования. Оба могут давать одинаковый результат с одинаковой скоростью. На практике это очень неясно и знание точного местоположенияпроисхождение имеет решающее значение для написания правильного кода для рисования - здесь не помогают такие расплывчатые термины, как «Качество» или «Скорость». Использование неправильного значения перечисления не делает рисование медленным или некачественным, оно просто делает его неправильным.

Тем не менее, кто-то должен был придумать эти значения перечисления, когда GDI + был разработан, и может иметьпредполагал причину существования HighQuality и HighSpeed.Я хотел бы знать эту причину - может быть, есть небольшая разница, или раньше была разница, но она больше не актуальна.

1 Ответ

0 голосов
/ 10 июня 2018

Я не знаю мотивации, но могу догадаться.

GDI - это очень старый API, и эта вещь появилась в Windows 2000. Рекомендованные требования к оборудованию для этой ОС, например, Pentium II 300 МГц, 128МБ ОЗУ, минимум Pentium 133 МГц, ОЗУ 32 МБ.По сегодняшним меркам это крайне медленное оборудование.Скорее всего, именно поэтому вы не наблюдаете никаких различий в скорости рендеринга на современном ПК с Windows.

...