freetype
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ft] Fw: outline points


From: Pankracy
Subject: Re: [ft] Fw: outline points
Date: Sun, 23 Dec 2012 22:26:53 +0100
User-agent: Thunderbird 2.0.0.24 (X11/20100623)

Wojciech Mamrak pisze:
> I am not sure whether I understand your intensions even though I am Polish :)
>
> W dużym skrócie:
> musisz załadować czcionkę, podać code point (unicode) danego znaku,
> pobrać jego kontur i dokonać jego dekompozycji (rozkładu) na części
> składowe. Kontur opisany jest funkcjami - prostymi i krzywymi Beziera.
> One opisane są poprzez punkty kontrolne.
> Jak opisany jest kontur znajdziesz tutaj:
>
> http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html
>
> Niestety nie zajmowałem się czymś takim więc nie mam kodu który mógłby
> posłużyć za bazę dla ciebie.
> FT_GlyphSlotRec ma pole outline typu FT_Outline, następnie patrz
> instrukcja dekompozycji opisana wyżej.
>   
Nareszcie w ludzkim języku ;)

Nawet jeśli nie pomożesz stanieś się moim głosem, bo mój angielski
koslawy strasznie.

1. Mam już obwiednie/outline. Nie musze niczego dekompozytować.
2. Potrzebuje wszystkich punktów na całej obwiedni. I tu jest problem.

Pomyślałem sobie, że skoro jest funkcja renderująca zamieniajaca outline
na obraz to musi gdzies istniec funkcja zamieniająca obwiednie na
punkty. Nie ma innej możliwości i potrzebuje wyniku tej funkcji czyli
zbioru wszystkich punktów. Jestem świadom , że scieżka/path jest
pokawałkowana i, ze realna funkcja wylicza z różną dokładnością każdy
kawałek. To obojetne. Musze wyznaczyć przecięcie całej obwiedni z linia
lub odległośc obwiedni od innej krzywej, a nie moge teo zrobic nie
znając wszystkich punktów.

Jest jeden warunek. Potrzebuję to z dowolną dokładnoscią, ale to tez
istnieje we freetype bo jest to zapisane w dowolnej rozdzielczości.
Rendering przebiega w zadanej rozdzielczości wiec moge sobie zażyczyć
np. obwiednia na 300dpi.

Ideałem było by więc:
1. Wczytanie obwiedni bez skalowania. I to umiem zrobić
FT_Load_Char( face, numerek, FT_LOAD_NO_SCALE );
2. Istnieje funkcja FT_Outline_Get_BBox która podaje rzeczywiste
maksymalne punkty na glifie. Nawet jesli glif jest źle zapisany i punkty
kontrolne nie leża na krańcach obwiedni. W odróżnieniu od CBox ktory
podaje po prostu najwieksze i najmniejsze punkty kontrolne i tyle.
Chodzi mi o to jak wyciągnac te punkty z całej obwiedni. Moga być jako
ułamki (bo pewnie i takie wyjda, a nie jak w foncie całkowite).

Mam nadzieję, że teraz napisałem bardziej jasno i składniej. Nie moge
sobie zrederowac po prostu krzywej i wyliczyc odległości od obrazka bo
błedy sa bardzo duże. Musze to zrobic na krzywych.


Gdzies w kodzie powinno to być. Pewnie wystarczy jakiś brudny hak by
dodac funkcję to wyświetlania takich punktów. Ale gdzie nie moge dojsc.
Szukałem w różnych funkcjach i się pogubiłem. Prosze pomóż ew. napisz po
angielsku w dwóch zdaniach o co mi chodzi a ktos to zrobi. Na oko
powinno to byc bardzo proste. Precież rysowanie glifów wylicza te
punkty. Wystarczy je tylko wypisać.

Pozdrawiam
i dziękuje za otwartość.
P.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]