当我尝试将某些纹理加载到我的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。这是一个严重的错误。这个应用程序,或者 它使用的库,正在使用无效的上下文,从而 导致系统稳定性的整体恶化 可靠性。此通知是礼貌的:请解决此问题。它 将在即将到来的更新中成为致命错误。
无论如何都要以编程方式转换纹理,同时仍然具有减少存储空间的好处吗?
答案 0 :(得分:5)
来自Quartz 2D Programming Guide:
重要提示:iOS不支持与设备无关或通用的色彩空间。 iOS应用程序必须使用设备颜色空间。
您是否尝试过使用CGColorSpaceCreateDeviceRGB
作为色彩空间?它看起来不错吗?