Масштабирование растровых системных шрифтов с AEB эффектом

Kernel-side graphics support
  • Да, планирую сделать библиотеку. Я, можно сказать, ещё только начал.

    Leency
    А как это получилось? Похоже на рисование шрифта без стирания предыдущего, скорей всего было. Я исправил рисование меняющихся цифр с фоном (часы, диспетчер задач).
  • Leency
    > Предыдущий вариант viewtopic.php?p=62042#p62042
    > Текущий вариант http://i.imgur.com/8DhcvhO.png
    А как это получилось? Похоже на рисование шрифта без стирания предыдущего, скорей всего было. Я исправил рисование меняющихся цифр с фоном (часы, диспетчер задач).
    В алгоритм закрался баг
    Image

    Попробуй открыть окно и медленно перемещай его вбок, текст будет плавно "плыть":
    Привет
    Привет
    Привет
    Привет
    Привет
    Из хаоса в космос
  • Дело не в алгоритме, а в стиле оформления. При сглаживании считываются пиксели экрана (или буфера), и смешиваются с цветом шрифта. Не знаю, что именно там происходит, но при стандартном стиле наблюдается только эффект наслоения в openDialog при движении стрелками. Собственно, на выделенной строке видно, что шрифт выводится некошерным способом.
  • Нужно определить в чет отличие твоего последнего кода от того что был в сообщении viewtopic.php?f=36&t=3084&start=15#p62027 когда этой проблемы не было.
    Из хаоса в космос
  • Отличие в том, что тогда ты использовал стандартный стиль оформления. Исправления в коде правильные, сравни часы. С другой стороны, посмотри на слово "Settings", оранжевый цвет говорит о том, что оно рисуется на белом фоне, а не на фоне выделения.
  • ... алгоритм нужно доработать...
    Attachments
    16.PNG
    16.PNG (19.17 KiB)
    Viewed 7825 times
  • Вообще, действительно наблюдаются какие-то глюки с openDialog. Я подумал, может быть там предыдущий текст сначала стирается нулевыми символами вместо вывода с белым фоном и пробелами. В моей реализации нулевой символ всегда означает конец строки.

    Так, теперь буквы y, w, v выглядят лучше. А остальные наверно хуже?
    Attachments
    Oh, upgrade.PNG
    Oh, upgrade.PNG (19.26 KiB)
    Viewed 7789 times
  • Pathoswithin wrote:Вообще, действительно наблюдаются какие-то глюки с openDialog. Я подумал, может быть там предыдущий текст сначала стирается нулевыми символами вместо вывода с белым фоном и пробелами. В моей реализации нулевой символ всегда означает конец строки.

    Так, теперь буквы y, w, v выглядят лучше. А остальные наверно хуже?
    А толщину линии некоторых больших букв не подкорректировать? Так лучше но толщина, например, где W, где изгибы как-то сливаются..
    тут у больших букв один я вижу недостаток, это изгибы, в некоторых местах толщины не хватает, в некоторых с лишком много
    у маленького размера все норм, в глаза ничего не бросается
    Технологии меняют мир, а я - меняю технологии.
  • Всё, ничего лучше придумать не могу. Но может кто-то придумает? Сейчас алгоритм работает просто:
    1 2 3
    4 5 6
    7 8 9
    10
    1.) После рисования чёрного квадрата 4, в белом квадрате 5 рисуется треугольник, если квадрат 2 чёрный, а квадрат 1 белый.
    2.) Если 1 чёрный, то рисуется только если 3 и 7 белые.
    3.) В первом случае, если 7 чёрный, а 6, 8 и 10 белые, то треугольник растягивается между 5 и 8.
    Если не проверять 10, то "V" и "Y" будут выглядеть лучше, но остальные как в предыдущем варианте.
    И ещё 3 зеркальных алгоритма.
    Попробую ещё подрихтовать сам шрифт.
    Attachments
    Any better.PNG
    Any better.PNG (33.83 KiB)
    Viewed 7734 times
  • "v" можно заменить на ее предыдущий вариант http://prntscr.com/7xz0rs ( http://kolibri-n.org/inf/other/screens )
    Из хаоса в космос
  • Дело не только в добавлении недостающих треугольников (а точнее пикселей), но и в отрезании лишних. попытка вывести простой алгоритм к успеху не привела. на разном масштабе от исходных увеличенных а в 2 раза пикселей надо отрезать (добавить) одно, а на увеличении 2.5 уже другое. (Пробовал в тетради в клеточку). Получается некая Маска, своя для каждого символа и увеличения. Может эти маски (собранные в библиотеку) и использовать при увеличении шрифтов (когда необходимо)? или свой алгоритм для каждой группы символов (Прямые, косые, полукруглые)? или алгоритм сглаживания только для сегмента символа? или при увеличении использовать двухбитные пиксели ( 00 - белый, 11 - черный, 10 - темносерый, 01 - светлосерый )???
    Юзер, просто юзер...со времён MS-DOS.
  • По поводу "волнистых" пиксельных прямых: можно аппроксимировать пиксельную прямую или пиксельную кривую по центрам пикселей соответственно прямой или кривой 2-4 степени. Правда, в случае шрифтов нужно как-то разбивать шрифт на отдельные сегменты.
  • Идеально масштабировать мизерные растровые 1-битовые шрифты пожалуй невозможно. Здесь есть два пути: либо использовать n-битовые с оттенками серого, что потребует совсем другой, сложный алгоритм, либо просто использовать шрифты побольше. В обоих случаях многократно возрастает вес шрифта, и логичней использовать векторные шрифты. Короче, уже есть FreeType и TrueType, а здесь задача выжать максимум из минимума.

    Сделал проверку квадрата 12 вместо 6, подрихтовал некоторые буквы. Вроде теперь неплохо.
    Attachments
    finaly.PNG
    finaly.PNG (33.85 KiB)
    Viewed 7675 times
  • Момент истины...
    Attachments
    Amen.PNG
    Amen.PNG (20 KiB)
    Viewed 7636 times
  • Who is online

    Users browsing this forum: No registered users and 2 guests