Альтернативы сглаживания

Я видел сглаживание в Windows с использованием GDI +, Java, а также с помощью Photoshop и Gimp. Существуют ли какие-либо другие библиотеки, которые предоставляют возможность сглаживания, не зависящую от поддержки со стороны ОС хоста?


person Agnel Kurian    schedule 07.05.2009    source источник
comment
Вам действительно нужно будет более конкретно указать, что вы хотите делать с изображениями, требующими сглаживания ...   -  person Paul Sonier    schedule 07.05.2009
comment
Я использую вызовы GDI для создания рисунка. Я пытаюсь уменьшить эффект лестницы при рисовании текста и наклонных линий. Свойство SmoothingMode действительно помогает, но я хотел бы посмотреть, обеспечивают ли другие библиотеки лучшее сглаживание / производительность.   -  person Agnel Kurian    schedule 10.05.2009


Ответы (3)


Antigrain Geometry обеспечивает сглаживание графики в программном обеспечении.

person Pete Kirkham    schedule 07.05.2009

Как заметил Саймон, термин «сглаживание» используется довольно часто неправильно, поэтому всегда полезно точно знать, что вы пытаетесь сделать.

Поскольку вы упоминаете GDI, я предполагаю, что вы говорите о поддержании хороших четких краев при изменении их размера - поэтому что-то вроде символа в шрифте выглядит чистым и не пиксельным, когда вы изменяете его размер в 2 или 3 раза от исходного размера. Для такого рода вещей я раньше использовал технику, называемую увеличением с альфа-тестированием - вы можете прочитать технический документ здесь:

http://www.valvesoftware.com/publications/2007/SIGGRAPH200<7_AlphaTested/Magnification.pdf >

Когда я реализовал его, я использовал более одной плоскости, чтобы я мог получить более точные края на всех типах объектов, но это кратко покрывает это ближе к концу. Из всех подходов (которые я использовал) для сохранения качества при масштабировании векторных изображений это был самый простой и качественный. Это также имеет то преимущество, что легко реализуется аппаратно. С точки зрения существующего API лучше всего использовать OpenGL или Direct3D - при этом на самом деле требуется только билинейная фильтрация и отображение текстуры для выполнения того, что он делает, так что вы можете использовать свой собственный (я использовал в прошлом). Если вы всегда имеете дело с прямоугольниками и вам нужно только масштабировать, это довольно тривиально, а добавление вращения не добавляет такой сложности. Если вы делаете собственное изображение, обязательно обратите особое внимание на субпиксельное позиционирование (как вы разрешаете положение пикселей, которые не попадают в полный пиксель, поскольку это критично для качества и иногда игнорируется.

Надеюсь, это поможет!

person Mark    schedule 07.05.2009

Есть (кстати, часто ошибочно, но это мертвая лошадь) много подходов сглаживания, которые можно использовать. В зависимости от того, что вы знаете об исходном сигнале и его предполагаемом использовании, разные вещи, скорее всего, дадут вам желаемый результат.

«Поддержка со стороны ОС хоста», вероятно, наиболее разумна, если вывод осуществляется через средства отображения ОС, поскольку они имеют наибольшую информацию о том, что делается с изображением.

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

person simon    schedule 07.05.2009