CGImage of UIImage return NULL

浪子不回头ぞ 提交于 2019-12-01 04:14:19

The CGImage property will return nil if the UIImage was created from another image such as an IOSurface or CIImage. To get around this in this particular case I can create a CGImage from an IOSurface using the c function then convert that to a UIImage.

UICreateCGImageFromIOSurface(IOSurfaceRef surface);

I have created UIImage from CGImage.

CIImage *ciImage = image.CIImage;
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef ref = [context createCGImage:ciImage fromRect:ciImage.extent];
UIImage *newImage = [UIImage imageWithCGImage:ref];

And now newImage.CGImage is not nil

What you did now is just create pieces with 0.f width, you should use two fors to define the width & height for your pieces. Code sample like this (not tested yet, but it should works):

for (int height = 0; height < image.size.height; height += piecesSize) {
  for (int width = 0; width < image.size.width; width += piecesSize) {
    CGRect subFrame = CGRectMake(width, height, piecesSize, piecesSize);

    CGImageRef newImage = CGImageCreateWithImageInRect(image.CGImage, subFrame);
    UIImage * finalImage = [UIImage imageWithCGImage:newImage];
    CGImageRelease(newImage);

    [tempArray addObject:finalImage];
  }
}

It happens in some cases when we try to crop image. I found the solution like this try this may be this can help you:-

NSData *imageData = UIImageJPEGRepresentation(yourImage, 0.9);
newImage = [UIImage imageWithData:imageData];

Convert CGImage to UIImage with this and cgImage will not be null:

func convert(cmage:CIImage) -> UIImage
{       
    let context:CIContext = CIContext.init(options: nil)
    let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!        
    let image:UIImage = UIImage.init(cgImage: cgImage)        
    return image
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!