Как получить положение каждого пикселя (координаты) полого символа, нарисованного с помощью Core Graphics? - PullRequest
1 голос
/ 14 января 2010

Я использую подкласс UIView для рисования алфавита с использованием Core Graphics. Используя этот код, только полые символы обозначаются как drwan (Делая цвет обводки - черный). Здесь мне нужна позиция каждого пикселя (координата) символа. Пожалуйста, дайте я представляю, как я получу каждую точку пикселя (только значение точки черной точки) пустого символа.

Исходный код:

/*UIView Subclass Method*/

- (void)drawRect:(CGRect)rect
{
      //Method to draw the alphabet
      [self drawChar:@"A" xcoord:5 ycoords:35];
}
-(void)drawChar:(NSString *)str xcoord: (CGFloat)x ycoord: (CGFloat)y
{

    const char *text = [str UTF8String];//Getting the alphabet
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSelectFont(ctx, "Helvetica", 40.0, kCGEncodingMacRoman);
    CGContextSetTextDrawingMode(ctx, kCGTextFillStroke);
    CGContextSetStrokeColorWithColor(ctx, [UIColor blackColor].CGColor);//to make the character hollow-Need only these points
    CGContextSetFillColorWithColor(ctx, [UIColor clearColor].CGColor);//Fill color of character is clear color

    CGAffineTransform xform = CGAffineTransformMake(
                                                    1.0,  0.0,
                                                    0.0, -1.0,
                                                    0.0,  0.0);//Giving a transformation to the alphabet

    CGContextSetTextMatrix(ctx, xform);

   CGContextShowTextAtPoint(ctx, x, y, text, strlen(text));//Generating the character
}

1 Ответ

2 голосов
/ 14 января 2010

Во-первых, есть удобный метод установки цвета заливки и обводки:

[[UIColor blackColor] setStroke];
[[UIColor clearColor] setFill];

либо то, либо использование CGContextSetGrayFillColor и CGContextSetGrayStrokeColor.


Что касается вашей проблемы, чтобы получить информацию о пикселях, вы должны использовать CGBitmapContext.Вы можете получить растровое изображение по CGBitmapContextGetData.Предположим, что вы объявляете растровое изображение RGBA, растровые данные будут упорядочены как

RGBA_at_(0,0)  RGBA_at_(1,0)  ...  RGBA_at_(w,0)  RGBA_at(0,1)  RGBA_at_(1,1) ...

, поэтому вы можете сканировать линейно для любых значений целевого цвета и определять черные пиксели.обратите внимание, что UIGraphicsGetCurrentContext() не обязательно является CGBitmapContext, поэтому вы не должны применять CGBitmapContextGetData к нему.Вместо этого вам нужно создать свой собственный растровый контекст с CGBitmapContextCreate, нарисовать текст в этом растровом контексте, получить результат CGImage с помощью CGBitmapContextCreateImage и, наконец, нарисовать этот CGImage на UIContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...