Creating mask with CGImageMaskCreate is all black (iphone)

后端 未结 3 963
猫巷女王i
猫巷女王i 2020-12-23 08:51

I\'m trying to create an image mask that from a composite of two existing images.

First I start with creating the composite which consists of a small image that is t

3条回答
  •  时光取名叫无心
    2020-12-23 09:18

    - (UIImage*) maskImage:(UIImage *)image {
    
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    
        UIImage *maskImage = [UIImage imageNamed:@"MaskFinal.png"];
        CGImageRef maskImageRef = [maskImage CGImage];
    
        // create a bitmap graphics context the size of the image
        CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
    
    
        if (mainViewContentContext==NULL)
            return NULL;
    
        CGFloat ratio = 0;
    
        ratio = maskImage.size.width/ image.size.width;
    
        if(ratio * image.size.height < maskImage.size.height) {
            ratio = maskImage.size.height/ image.size.height;
        } 
    
        CGRect rect1  = {{0, 0}, {maskImage.size.width, maskImage.size.height}};
        CGRect rect2  = {{-((image.size.width*ratio)-maskImage.size.width)/2 , -((image.size.height*ratio)-maskImage.size.height)/2}, {image.size.width*ratio, image.size.height*ratio}};
    
    
        CGContextClipToMask(mainViewContentContext, rect1, maskImageRef);
        CGContextDrawImage(mainViewContentContext, rect2, image.CGImage);
    
    
        // Create CGImageRef of the main view bitmap content, and then
        // release that bitmap context
        CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext);
        CGContextRelease(mainViewContentContext);
    
        UIImage *theImage = [UIImage imageWithCGImage:newImage];
    
        CGImageRelease(newImage);
    
        // return the image
        return theImage;
    }
    

提交回复
热议问题