0

我正在尝试为 CGContext 设置透明背景,但不断得到:

CGBitmapContextCreateImage: invalid context 0x0

这就是我所拥有的。如果我将 kCGImageAlphaLast 切换到 kCGImageAlphaNoneSkipFirst 它可以工作,但 alpha 通道被完全忽略。我对这种颜色和上下文的东西很陌生-有什么想法吗?

-(BOOL) initContext:(CGSize)size {
int bitmapByteCount;
int bitmapBytesPerRow;

bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);

cacheBitmap = malloc( bitmapByteCount );
if (cacheBitmap == NULL){
    return NO;
}

cacheContext = CGBitmapContextCreate (NULL, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaLast);

CGContextSetRGBFillColor(cacheContext, 1.0, 1.0, 1.0f, 0.5);
CGContextFillRect(cacheContext, self.bounds);

return YES;
}
4

1 回答 1

1

CGBitmapContext仅支持某些可能的像素格式。你可能想要kCGImageAlphaPremultipliedLast.

(这是对预乘 alpha 的解释。)

另请注意:

  • 无需 malloc cacheBitmap。由于您将NULL作为第一个参数传递给CGBitmapContextCreate,因此位图上下文将进行自己的分配。

  • 根据您的代码,self.bounds可能不是要填充的正确矩形。使用会更安全CGRectMake(0.f, 0.f, size.width, size.height)

于 2012-11-25T20:18:46.823 回答