Just after I wrote the code, I found a tricky way to calculate the required font size, that is, using a loop to test the limited amount of possible font sizes, until we find the correct one.
But, surely I'd prefer a more formal algorithm to this problem. Regards, Albert On Fri, Mar 2, 2012 at 2:05 PM, milky jing <[email protected]> wrote: > Thank for your reply Werner, > > Here is a piece of code I wrote moments ago, > > #include "./FreeType/ft2build.h" > #include FT_FREETYPE_H > #pragma comment(lib, "./FreeType/freetype248.lib") > > int main() { > FT_Library library; > FT_Face face1; > FT_Face face2; > const char *filename = "C:\\Windows\\Fonts\\Arial.ttf"; /* the > algorithm should not be font specific, i.e., suitable for a variety of > fonts */ > int fontSize1 = 40; /* fontSize1 is a given value */ > int fontSize2; /* fontSize2 need to be calculated, derived from > fontSize1 */ > FT_Size_RequestRec rq; > FT_Init_FreeType(&library); > FT_New_Face(library, filename, 0, &face1); > FT_New_Face(library, filename, 0, &face2); > /* set the REAL_DIM size, fontSize1 */ > rq.type = FT_SIZE_REQUEST_TYPE_REAL_DIM; > rq.width = 0; > rq.height = fontSize1 << 6; > rq.horiResolution = 0; > rq.vertResolution = 0; > FT_Request_Size(face1, &rq); > /* set the NOMINAL size, fontSize2 */ > fontSize2 = fontSize1 - 4; /* How to calculate fontSize2 to meet > the following requirements? I tried to -1, -2, -3, and finally found -4 is > good */ > FT_Set_Char_Size(face2, 0, fontSize2 << 6, 0, 0); > /* the requirement for the calculation of fontSize2 is, for example */ > if (face2->size->metrics.ascender == face1->size->metrics.ascender && > face2->size->metrics.descender == face1->size->metrics.descender) { > printf("Good, fontSize2 is just what we wanted!\n"); > > printf("ascender1=%i\tascneder2=%i\ndescender1=%i\tdescender2=%i\n", > face1->size->metrics.ascender, face2->size->metrics.ascender, > face1->size->metrics.descender, face1->size->metrics.descender); > } else { > printf("Bad, try another fontSize2.\n"); > > printf("ascender1=%i\tascneder2=%i\ndescender1=%i\tdescender2=%i\n", > face1->size->metrics.ascender, face2->size->metrics.ascender, > face1->size->metrics.descender, face1->size->metrics.descender); > } > /* clean up */ > FT_Done_Face(face1); > FT_Done_Face(face2); > FT_Done_FreeType(library); > return 0; > } > > > > On Fri, Mar 2, 2012 at 2:04 AM, Werner LEMBERG <[email protected]> wrote: > >> >> > I am facing a problem which requires the calculation of the >> > equivalent font size (fontSize2) for FT_SIZE_REQUEST_TYPE_NOMINAL, >> > [...] >> >> Answering your question would be much simpler if you provided a >> (compilable) code snippet which demonstrates what you expect and what >> you get instead, ideally using a freely available font. >> >> >> Werner >> > >
_______________________________________________ Freetype mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/freetype
