2015-07-07 5 views
3

код, как этотПочему CGContext ничего не рисует, когда я заливаю цвет пути до цвета пути хода.

UIGraphicsBeginImageContextWithOptions(CGSizeMake(100, 100), NO, 0); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextMoveToPoint(context, 5, 5); 
CGContextAddLineToPoint(context, 100, 100); 
CGContextSetLineWidth(context, 5); 
CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); 
CGContextFillPath(context); 
CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor); 
CGContextStrokePath(context); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

, когда я удалить цвет заливки изображение является правильным. Но я не могу понять, почему я добавляю цвет заливки, изображение ничего?

+1

Вы не создали путь, так что заполнение, вероятно, заполняет весь контекст. Вам нужно создать закрытую клятву, чтобы заполнить ее. – rmaddy

+0

1, Если у меня нет пути, как может произойти ударный путь. 2, Если я положу метод fillPath после пути стока, то изображение будет правильным. Как это объяснить? – frank

+1

1. У вас нет закрытого пути, который вы можете заполнить. У вас просто есть линия, которую вы можете погладить. 2. Скорее всего, поглаживание линии делает ее закрытой, что позволяет вам ее заполнить. – rmaddy

ответ

0

Проблема заключается в том, как вы рисуете контекст.

Пожалуйста, попробуйте следующее:

CGRect rect = CGRectMake(0.0,0.0, 100, 100); 
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    //Set background color 
    CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0); 
    CGContextFillRect(context,rect); 
    CGContextSetLineWidth(context, 2.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor); 
    CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor); 
    CGContextMoveToPoint(context, 5, 5); 
    CGContextAddLineToPoint(context, 100, 100); 
    CGContextStrokePath(context); 
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

Теперь

_testImage.image = image; 

вы получите результат. Пожалуйста, дайте мне знать ваши отзывы.

+0

Это работает. Но вы пропустите одну строку 'CGContextFillPath (контекст):' Если вы добавите эту строку до 'ContextStrokePath (контекст) ', изображение все равно пустое ... Я чувствую смущение. как fillPath может влиять на ход хода и как последовательность заполнения и инсульта может влиять на результат. – frank

+0

Вы можете попробовать с CGContextDrawPath (context, kCGPathFillStroke) вместо CGContextStrokePath (контекст) в той же позиции. Я думаю, будет работать .. – rejusss