iOS CGBitmapInfo 详解 以及 颜色空间colorspace 详解

iOS CGBitmapInfo 详解 以及 颜色空间colorspace 详解


CGBitmapInfo由两部分取或运算组成

一部分是 指定 cpu使用的大小端模式

另一部分指定的是颜色空间中每个 bule green red alpha 的排列顺序。


typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {

    kCGImageAlphaNone,               /* For example, RGB. */

    kCGImageAlphaPremultipliedLast,  /* For example, premultiplied RGBA */

    kCGImageAlphaPremultipliedFirst, /* For example, premultiplied ARGB */

    kCGImageAlphaLast,               /* For example, non-premultiplied RGBA */

    kCGImageAlphaFirst,              /* For example, non-premultiplied ARGB */

    kCGImageAlphaNoneSkipLast,       /* For example, RBGX. */

    kCGImageAlphaNoneSkipFirst,      /* For example, XRGB. */

    kCGImageAlphaOnly                /* No color data, alpha data only */

};


对于CGImageAlphaInfo此部分比较迷惑


kCGImageAlphaLastkCGImageAlphaFirst有什么区别?分别与CGImageByteOrderInfo取与运算后又有什么区别?


在解释区别前先看下颜色空间的格式 RGB肯定要连续排序,唯一可能的变化是A的存放位置,A存放位置有两种可能:

情况一:A放在RGB之后RGBA 对应iOSCGImageAlphaInfoAlphaLast.


情况二:A放在RGB前面ARGB 对应iOSCGImageAlphaInfoAlphaFirst



对于情况一:A放在RGB之后RGBA 

对于大端对齐的cpu其格式是 RGBA

对于小段对齐的cpu其格式是 ABGR

对于情况二:A放在RGB前面ARGB

对于大端对齐的cpu其格式是 ARGB

对于小段对齐的cpu其格式是 BGRA


由此可见CGImageAlphaInfoFor example全是以大端对齐的cpu为参考,可是iOS使用的arm cpu是小端对齐的。


        //CGImageByteOrderInfo | CGImageAlphaInfo 组合后CGBitmapInfo 的颜色空间的格式

        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaLast; // ABGR

        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Little | kCGImageAlphaFirst; // BGRA

        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaLast; // RGBA

        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaFirst; // ARGB


猜你喜欢

转载自blog.csdn.net/jeffasd/article/details/80571366