Jak działa renderowanie czcionek?

11

Zdaję sobie sprawę, że w zasadzie nic nie wiem o sposobie renderowania czcionek na moim komputerze.

Z tego, co widzę, renderowanie czcionek jest generalnie spójne w całym systemie. Na przykład ustawienia podpowiedzi dla czcionek subpikseli, które konfiguruję w moim panelu sterowania DE, mają wpływ na tekst pojawiający się na obrzeżach okna, w przeglądarce, w edytorze tekstu i tak dalej. (Powinienem zauważyć, że niektóre aplikacje Java wykazują zauważalną różnicę, więc chyba używają innego mechanizmu renderowania czcionek).

Z powyższego wynika, że ​​prawdopodobnie wszystkie aplikacje, które wymagają renderowania czcionek, korzystają z niektórych bibliotek w całym systemie operacyjnym (lub DE).

Z drugiej strony przeglądarki zazwyczaj zarządzają własnym renderingiem za pomocą silnika renderującego, który zajmuje się pozycjonowaniem różnych elementów - w tym tekstu - zgodnie z określonymi regułami przepływu.

Nie jestem pewien, w jaki sposób te dwa fakty są kompatybilne. Zakładam, że przeglądarka musiałaby poprosić system operacyjny o narysowanie glifu w danej pozycji, ale jak może zarządzać przepływem tekstu, nie wiedząc wcześniej, ile miejsca zajmie glif? Czy istnieją osobne wywołania w celu określenia rozmiarów glifów, aby przeglądarka mogła zarządzać przepływem, tak jakby znaki były małymi polami, które są następnie wypełniane przez system operacyjny? (Chociaż nie zajmuje się to kerningiem). Czy system operacyjny jest odpowiedzialny za rysowanie całego obszaru tekstowego, w tym przepływu tekstu? Czy system operacyjny zwraca renderowany glif jako mapę bitową i pozostawia go aplikacji, aby narysował go na ekranie?

Andrea
źródło
1
Krótka odpowiedź brzmi „tak”.
Graham Borland,
@GrahamBorland ...: - / Na którą z trzech przedstawionych przeze mnie alternatyw jest odpowiedź „tak”?
Andrea,
Wszystkie, w zależności od okoliczności. Spróbuję ułożyć poprawną odpowiedź.
Graham Borland,

Odpowiedzi:

9

Masz rację, że ogólnie aplikacje używają bibliotek udostępnianych przez system operacyjny lub zestaw narzędzi GUI do renderowania czcionek.

Typowe silniki czcionek pozwalają na wiele trybów działania. W prostym przypadku aplikacja może poprosić o narysowanie ciągu tekstowego w określonej pozycji, a silnik zajmuje się wszystkim (pomiar, pozycjonowanie, rysowanie pikseli na wyświetlaczu itp.).

W przypadku aplikacji wymagających dokładniejszej kontroli - na przykład przeglądarek lub edytorów tekstu - silnik wyświetli interfejsy, w których aplikacja może poprosić o pomiar danego fragmentu tekstu z wyprzedzeniem. Aplikacja może następnie wykorzystać tę wiedzę, aby obliczyć, ile tekstu może zmieścić się w wierszu, gdzie powinny być podziały wiersza, ile miejsca zajmie akapit, itp. Aplikacja może nadal poprosić silnik o wykonanie renderowania pikseli.

(Może istnieć scenariusz pośredni, w którym silnik może przyjąć parametr maksymalnej szerokości i ewentualnie niektóre parametry kerningu / wypełniania i automatycznie renderować tyle tekstu, ile może zmieścić).

Wreszcie silnik czcionek może pozwolić aplikacji na przejęcie ostatecznego renderowania tekstu, zwracając bitmapy glifów wstępnie renderowanych w określonym rozmiarze, umożliwiając aplikacji ustawienie i skomponowanie go na ostatecznym ekranie. Lub silnik może nawet zaoferować, że zwróci surowe dane obrysu glifu do renderowania za pomocą jakiegoś wektorowego zestawu narzędzi.

Graham Borland
źródło