Ios不支持颜色空间错误

时间:2015-02-14 19:17:26

标签: ios objective-c cocoa-touch

当我尝试将某些纹理加载到我的opengl应用程序中时,对于看似压缩的.png文件,我得到了不受支持的颜色空间错误。

如果我右键单击并检查失败的纹理,它们具有以下属性。

颜色配置文件:sRGB IEC61966-2.1

.png似乎在压缩时获得此属性。我真的很想拥有这个功能,因为它可以将纹理大小减少约50%。

这是我的纹理加载代码:

-(GLubyte *) generatePixelDataFromImage: (UIImage *) pic{

    GLubyte *pixelData = (GLubyte *) calloc(width * height *4, sizeof(GLubyte));
    CGColorSpaceRef imageCS = CGImageGetColorSpace(pic.CGImage);

    CGBitmapInfo bitmapInfo = (CGBitmapInfo) kCGImageAlphaPremultipliedLast;
    CGContextRef gc = CGBitmapContextCreate(pixelData, width, height, 8, width*4, imageCS, bitmapInfo);

    CGContextDrawImage(gc, CGRectMake(0, 0, width, height), pic.CGImage);
    CGContextRelease(gc);
    return pixelData;
}

这是错误:

  

错误:CGBitmapContextCreate:不支持的颜色空间。 2月14日   13:11:59 Garretts-iPhone myApp [712]:CGContextDrawImage:   无效的上下文0x0。这是一个严重的错误。这个应用程序,或者   它使用的库,正在使用无效的上下文,从而   导致系统稳定性的整体恶化   可靠性。此通知是礼貌的:请解决此问题。它   将在即将到来的更新中成为致命错误。

无论如何都要以编程方式转换纹理,同时仍然具有减少存储空间的好处吗?

1 个答案:

答案 0 :(得分:5)

来自Quartz 2D Programming Guide

  

重要提示:iOS不支持与设备无关或通用的色彩空间。 iOS应用程序必须使用设备颜色空间。

您是否尝试过使用CGColorSpaceCreateDeviceRGB作为色彩空间?它看起来不错吗?