2015-01-25 1 views
2

У меня есть два изображения, одно из которых является прозрачным с некоторыми краями/границами, а другое - фактическим изображением. Я хочу объединить их обоих.Маскирование прозрачного изображения с другим фактическим изображением в iOS

enter image description hereenter image description here

Я использовал следующий код для маскировки и объединить изображение:

- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

    // create a bitmap graphics context the size of the image 
    CGFloat dim = MIN(image.size.width, image.size.height); 
    CGSize size = CGSizeMake(dim, dim); 
    UIGraphicsBeginImageContextWithOptions(size, NO, .0); 
    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect:(CGRect){ CGPointZero, size }]; 
    [bezierPath fill]; 
    [bezierPath addClip]; 
    CGPoint offset = CGPointMake((dim - image.size.width) * 0.5, (dim - image.size.height) * 0.5); 
    [image drawInRect:(CGRect){ offset, image.size }]; 
    UIImage *ret = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return ret; 
} 

Результат:

enter image description here

В результате изображение, границы изображения, используемого в качестве маски, отсутствует. Может кто-нибудь, пожалуйста, помогите мне с этим?

+0

Вы никогда не рисуете maskImage в своем контексте или каким-либо образом используете maskImage в своем методе ... –

+0

есть ли способ достичь. Я не знаю, как это сделать. Я только что взял код откуда-то. – user3772344

ответ

0

Я написал маскирующий категорию КСН (ну это в основном кросс-платформенный, поскольку CoreImage на обеих платформах в любом случае:

github project

функциональность ядра сводится к следующему (для примера)

UIImage *person = ... 
UIImage *circle = ... 
UIImage *result = [person imageMaskedWith:circle]; 

UIImageView *redbox = [[UIImageView alloc] initWithImage:result]; 
redbox.backgroundColor = [UIColor redColor]; //this can be a gradient! 

основная часть кода из категории:

CGImageRef imageReference = image.CGImage; 
CGImageRef maskReference = mask.CGImage; 
CGRect rect = CGRectMake(0, 0, CGImageGetWidth(imageReference), CGImageGetHeight(imageReference)); 

// draw with Core Graphics 
UIGraphicsBeginImageContext(rect.size); 
CGContextRef bitmap = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(bitmap, 0.0, rect.size.height); 
CGContextScaleCTM(bitmap, 1.0, -1.0); 

CGContextClipToMask(bitmap, rect, maskReference); 
CGContextDrawImage(bitmap, rect, imageReference); 

newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
Смежные вопросы