当我试图加载某些纹理到我的opengl应用程序,我得到一个不受支持的颜色空间错误,似乎压缩的.png文件。
如果我右键单击并检查失败的纹理,它们具有以下属性。
颜色配置文件: sRGB 2.1 61966-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 myApp712 : CGContextDrawImage:无效上下文0x0。这是一个严重的错误。此应用程序或它使用的库使用无效上下文,从而导致系统稳定性和可靠性的总体下降。这个通知是礼貌的:请解决这个问题。这将成为一个致命的错误,在即将更新。
是否存在以编程方式转换纹理,同时仍然有减少存储空间的好处?
发布于 2015-02-14 19:21:19
重要: iOS不支持与设备无关的或通用的颜色空间。iOS应用程序必须使用设备颜色空间。
你试过只使用CGColorSpaceCreateDeviceRGB作为颜色空间吗?看上去还好吗?
https://stackoverflow.com/questions/28519274
复制相似问题