0

CGContextに透明な背景を設定しようとしていますが、次のようになります。

CGBitmapContextCreateImage: invalid context 0x0

これが私が持っているものです。kCGImageAlphaLastをkCGImageAlphaNoneSkipFirstに切り替えると機能しますが、アルファチャネルは完全に無視されます。私はこの色とコンテキストに非常に慣れていません-何かアイデアはありますか?

-(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

(これが事前に乗算されたアルファの説明です。)

また注意してください:

  • mallocする必要はありませんcacheBitmapNULLに最初の引数として渡すのでCGBitmapContextCreate、ビットマップコンテキストは独自の割り当てを行います。

  • コードによっては、self.bounds塗りつぶすのに適切な長方形ではない場合があります。を使用する方が安全CGRectMake(0.f, 0.f, size.width, size.height)です。

于 2012-11-25T20:18:46.823 に答える