CGGlyphs неправильная позиция - PullRequest
0 голосов
/ 16 мая 2018

Я пытался нарисовать один глиф с основным текстом, но позиция буквы x немного отличается.Красный прямоугольник показывает правильное положение.

CGContextRef main = [[NSGraphicsContext currentContext] graphicsPort];
    CGContextSetAllowsAntialiasing(main, false);

    CGContextSetFont(main, font);
    CGContextSetFontSize(main, 200);
    CGContextSetTextPosition(main, 0, 0);

    glyphs[0] =  CGFontGetGlyphWithGlyphName(font, CFSTR("E"));
    points[0] = CGPointMake(100, 100);

    CGContextSetRGBFillColor(main, 0, 1, 0, 1);
    CGContextShowGlyphsAtPositions(main, glyphs, points, 1);

    CGRect *r = malloc(sizeof(CGRect)*1);
    CGFontGetGlyphBBoxes(font, glyphs, 1, r);
    float t = roundf(r[0].size.width/CGFontGetUnitsPerEm(font)*200);
    float t2 = roundf(r[0].size.height/CGFontGetUnitsPerEm(font)*200);
    CGRect r2 = CGRectMake(points[0].x, points[0].y-1, t, t2+2);
    CGContextSetRGBStrokeColor(main, 1, 0, 0, 1);
    CGContextStrokeRect(main, r2);

Вот скриншот:

enter image description here

1 Ответ

0 голосов
/ 17 мая 2018

Вы предполагаете, что происхождение ограничивающего прямоугольника равно нулю. Это не так. Вам нужно добавить в его смещение. Что-то вроде (по вашим шаблонам):

float cornerX = roundf(r[0].origin.x/CGFontGetUnitsPerEm(font)*200);
float cornerY = roundf(r[0].origin.y/CGFontGetUnitsPerEm(font)*200);

CGRect r2 = CGRectMake(points[0].x+cornerX, points[0].y-1+cornerY, t, t2+2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...