【问题标题】:CGImage to UIImage doesn't workCGImage 到 UIImage 不起作用
【发布时间】:2013-07-10 16:29:25
【问题描述】:

我正在为 iPad 开发 iOS 应用程序,我使用 Grabkit 来从 Facebook、Twitter、Flicker 和相机胶卷中获取图像。要从最后一张中获取图像,我需要将 CGImage 转换为 UIImage,但我遇到了麻烦。就像我没有得到任何图像一样,因为当我稍后使用 UIImage 时,应用程序崩溃并显示此日志:

 *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 653]'

我正在使用以下代码来转换 CGImage:

UIImage* image = [UIImage imageWithCGImage:imgRef];

所以这段代码不会崩溃,但是当我使用创建的图像时,它会崩溃。怎么了?代码错了吗?

【问题讨论】:

  • 是 imgRef 一个 UIImageView 或者只是一个 UIImage。如果是视图,则必须使用 imgRef.image。
  • 表示CGImage为NULL,用断点检查
  • 这里可以找到所有代码:ves.cat/hc33
  • 顺便说一下,imgRef 是在这个问题中可以看到的代码中创建的 CGImage:ves.cat/hc33

标签: ios objective-c crash uiimage cgimage


【解决方案1】:

你应该像UIImage* myImage = [[UIImage alloc] initWithCGImage:myCGImage];那样使用alloc init

或者你可以试试这个:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
int size = height*width*bytesPerPixel;
unsigned char *rawData = malloc(size); 
CGContextRef context = CGBitmapContextCreate(rawData,width,height,bitsPerComponent,bytesPerRow,colorSpace,kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0,0,width,height),image);
UIImage *newImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(context)];
CGContextRelease(context);    
free(rawData);

【讨论】:

  • 我在实施此解决方案时遇到此错误。 CGContextDrawImage:无效的上下文 0x0。这是一个严重的错误。此应用程序或它使用的库正在使用无效的上下文,从而导致系统稳定性和可靠性的整体下降。此通知是出于礼貌:请解决此问题。这将成为即将到来的更新中的致命错误。
【解决方案2】:

很好的建议,帮助我解决了内存泄漏问题。释放分配的内存非常重要。当你这样做时:

        unsigned char* buffer = (unsigned char*)malloc( dataSize );

之后也这样做

        free(buffer);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2011-01-23
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多