it seems most of my calculations for freetype are based on ceil() so yes... if any fraction round up...
do you keep the original freetype bitmap? Or are you moving it to an internal format?
I use FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL ); which has a bitmap in the face->glyph structure that gets filled in and apparently sized appropriate for the glyph... but that's not an outline. I process the bitmap and skip any areas that are blank outside the character... I assumed it would be on some worst-case... that included the expected white area around the character; and I wanted a minimal character representation... but then once I have that I have exact w/h of the bitmap; so I end up building a opengl texture with exact characters + 1 row between so I don't get antialias overflows... based on character height for matching rows and appending across...
seems to measure all lines of a character, find least bit set call it left, find max x bit set, call it+1 right, and set character size to right-left. if right > 0...
I tried to match up like metrics->horiBearing and stuff; but never worked well until I just scanned for the data in the bitmap....