[英]Problems with CGbitmapcontext and alpha
I'm trying to develop an draw app using Core Graphics. 我正在尝试使用Core Graphics开发绘图应用程序。 I want to have the background to be in alpha but instead it is in black.
我想将背景设为Alpha,但改为黑色。 I tried using all the different types of bitmapinfo types with no success.
我尝试使用所有不同类型的bitmapinfo类型,但均未成功。 kCGImageAlphaPremultipliedLast will not work either.
kCGImageAlphaPremultipliedLast也不起作用。 Anyone knows how to fix this?
有人知道如何解决这个问题吗?
- (BOOL) initContext:(CGSize)size {
int bitmapByteCount;
int bitmapBytesPerRow;
// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);
// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
cacheBitmap = malloc( bitmapByteCount );
if (cacheBitmap == NULL){
return NO;
}
CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipFirst;
cacheContext = CGBitmapContextCreate (cacheBitmap, size.width, size.height, 8, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), bitmapInfo);
CGContextSetRGBFillColor(cacheContext, 0, 0, 0, 0);
CGContextFillRect(cacheContext, (CGRect){CGPointZero, size});
return YES;
}
I'm using this code to do pretty much exactly what you're asking. 我正在使用此代码几乎完全按照您的要求进行操作。 I've set the color to red with a 50% alpha instead of 0% so you can actually see that the alpha channel is there.
我将颜色设置为红色,alpha值为50%,而不是0%,因此您实际上可以看到存在alpha通道。
@implementation ViewController
{
CGContextRef cacheContext;
void* cacheBitmap;
__weak IBOutlet UIImageView* _imageView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setupContext:self.view.bounds.size];
CGImageRef cgImage = CGBitmapContextCreateImage(cacheContext);
_imageView.image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
}
// Name changed to avoid using the magic word "init"
- (BOOL) setupContext:(CGSize)size
{
int bitmapByteCount;
int bitmapBytesPerRow;
// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);
// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
cacheBitmap = malloc( bitmapByteCount );
if (cacheBitmap == NULL){
return NO;
}
CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrderDefault;
// Create and define the color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
cacheContext = CGBitmapContextCreate (cacheBitmap, size.width, size.height, 8, bitmapBytesPerRow, colorSpace, bitmapInfo);
CGContextSetRGBFillColor(cacheContext, 1., 0, 0, 0.5);
CGContextFillRect(cacheContext, (CGRect){CGPointZero, size});
// Release the color space so memory doesn't leak
CGColorSpaceRelease(colorSpace);
return YES;
}
@end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.