Я довольно много вручную рисую 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
.Я хотел бы знать эту причину - может быть, есть небольшая разница, или раньше была разница, но она больше не актуальна.