2013-04-05 2 views
0

У меня есть приложение для камеры, чтобы загрузить фотографию в устройство с маской. Все в порядке. Когда я пытаюсь использовать renderInContext для сохранения изображения, я вижу изображение без маски.renderInContext не поддерживает маску?

UIGraphicsBeginImageContext(contentView.bounds.size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[contentView.layer renderInContext:context]; 
UIImage *outImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(outImage, self, @selector(image: didFinishSavingWithError: contextInfo:), context); 

Я прочитал статью от Apple, чтобы сказать, что renderInContext не поддерживает маску и состав. Я сделал несколько поисков в Интернете, чтобы получить информацию, которую UIView нужно рисовать как контекст, а затем использовать renderInContext для сохранения изображения.

Теперь мой вопрос - какой метод выполнять эту работу? Как насчет drawRect, drawInRect, drawLayer, drawInContent или другого метода. Может ли кто-нибудь дать мне подсказку. Спасибо большое.

ответ

0

Я начал здесь: http://chinkisingh.com/2013/03/03/draw-on-iphoneipad-screen-using-bezier-paths-core-graphics-ios-app-development/

У меня есть UIBezierPath, и я хотел применить градиент к нему и применить к существующему изображению, увидеть, если следующий код помогает

CGRect r = CGRectMake(0, 0, HEART_SIZE, HEART_SIZE); 
    UIBezierPath *heart = [Bezier heartShape:r]; //this is only in my case 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    UIColor *darkPink = [UIColor colorWithHue:0.915 saturation:1.000 brightness:0.941 alpha:1.000]; 
    UIColor *lightPink = [UIColor colorWithHue:0.917 saturation:0.647 brightness:1.000 alpha:1.000]; 

    NSArray *gradientColors = [NSArray arrayWithObjects: 
           (id)darkPink.CGColor, 
           (id)lightPink.CGColor, 
           (id)darkPink.CGColor, nil]; 
    CGFloat gradientLocations[] = {0, 0.5, 1}; 
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)gradientColors, gradientLocations); 

    CGColorSpaceRelease(colorSpace); 


    UIGraphicsBeginImageContext(r.size); 
    heart.lineCapStyle = kCGLineCapRound; 
    heart.lineWidth = 10.0f; 
    [[UIColor blackColor] setStroke]; 
    [[UIColor redColor] setFill]; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 

    [heart stroke]; //removed the black stroke around 
    [heart fill]; 
    CGContextAddPath(context, heart.CGPath); 
    CGContextClip(context); 
    CGContextDrawLinearGradient(context, gradient, CGPointMake(10, 10), CGPointMake(210, 210), kCGGradientDrawsAfterEndLocation); //check that gradient is drawn in the right place 

    CGGradientRelease(gradient); 
    UIImage *theRightImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
Смежные вопросы