今天遇到一个奇怪的问题:服务器返回的某一张图片,明明是JPG的形式,但是就是显示不出来,而其他的图片(路径相识,格式一样 )都能正常的显示出来。并且控制台输出如下错误:
<Error>: CGBitmapContextCreate: unsupported parameter combination: set CGBITMAP_CONTEXT_LOG_ERRORS environmental variable to see the details
<Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
<Error>: CGBitmapContextCreateImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
比较好的是:程序能正常运行,不会闪退,只是图片不能正常显示而已。
问题分析:
同样是JPG格式的图片,怎么看都是一样的。可有的图片就是显示不出来。
其实图片的颜色空间是分RGB与CMKY等不同模式的。如果JPG的颜色空间为CMKY,图片就显示不出来,并且控制台会输出上诉信息。
解决方法:
通过上面的分析也就知道怎么改了。就是将图片的颜色空间改成RGB的。怎么改能呢?用Photoshop重新导出成RGB格式的就行了。
关于颜色空间的补充:
颜色空间格式还有CIE色度模型、HSI颜色空间、YUV(Lab)颜色空间 等
1、RGB颜色空间:计算机颜色显示器显示颜色的原理与彩色电视机一样,都是采用R、G、B相加混色的原理,通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生颜色的。在多媒体计算机技术中,用得最多的是RGB颜色空间。
2、CMY颜色空间 :彩色印刷或彩色打印的纸张是不能发射光线的,因而印刷机或彩色打印机就只能使用一些能够吸收特定的光波而反射其他光波的油墨或颜料。油墨或颜料的3基色是青(Cyan)、品红(Magenta)和黄(Yellow),简称为CMY。
3、CIE色度模型:国际照明委员会(CIE,Commission Internationale de L'Eclairage / International Commission on Illumination)的色度模型是最早使用的模型之一。它是三维模型,其中,x和y两维定义颜色,第3维定义亮度。
4、HSI颜色空间:HSI(Hue,Saturation and Intensity)颜色空间是从人的视觉系统出发,用色调(Hue)、色饱和度(Saturation或Chroma)和亮度(Intensity或Brightness)来描述颜色。
5、YUV(Lab)颜色空间:在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD(电耦合器件)摄像机,它把得到的彩色图像信号,经分色、分别放大校正得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y、B-Y,最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这就是我们常用的YUV颜色空间。