CGImageGetColorSpace和图像蒙版

时间:2011-01-18 09:48:03

标签: objective-c

据苹果公司的文件报道:

  

“CGImageGetColorSpace->指定位图图像的源颜色空间,如果图像是图像蒙版,则为NULL”

我需要创建一个图像蒙版,尝试使用黑白位图和许多其他格式,但函数返回就像图像是RGB(没有alpha)。

我可以通过哪种图片CGImageGetColorSpace返回NULL(图片掩码)?

如果我制作灰度图像并加载为alpha通道(创建上下文为8bit /灰度),则图像为白色。

有什么想法吗?

这是示例代码“Texture2D”:

@implementation Texture2D (Image)

- (id) initWithImage:(UIImage *)uiImage
{
NSUInteger    width,
   height,
   i;
CGContextRef   context = nil;
void*     data = nil;;
CGColorSpaceRef   colorSpace;
void*     tempData;
unsigned int*   inPixel32;
unsigned short*   outPixel16;
BOOL     hasAlpha;
CGImageAlphaInfo  info;
CGAffineTransform  transform;
CGSize     imageSize;
Texture2DPixelFormat    pixelFormat;
CGImageRef    image;
UIImageOrientation  orientation;
BOOL     sizeToFit = NO;


image = [uiImage CGImage];
orientation = [uiImage imageOrientation]; 

if(image == NULL) {
[self release];
NSLog(@"Image is Null");
return nil;
}


info = CGImageGetAlphaInfo(image);
hasAlpha = ((info == kCGImageAlphaPremultipliedLast) || (info ==    CGImageAlphaPremultipliedFirst) || (info == kCGImageAlphaLast) || (info == kCGImageAlphaFirst) ? YES : NO);
if(CGImageGetColorSpace(image)) {
if(hasAlpha)
pixelFormat = kTexture2DPixelFormat_RGBA8888;
else
pixelFormat = kTexture2DPixelFormat_RGB565;
} else  //NOTE: No colorspace means a mask image
pixelFormat = kTexture2DPixelFormat_A8;

1 个答案:

答案 0 :(得分:0)

CGImageRef maskRef = [uiImage CGImage];
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef), NULL, false);