KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm trying to create a bitmap in memory as part of a pattern function that a drawLayer:inContext: method (this method is part of the CALayer delegate protocol) will call. The pattern function looks similar to this: static const size_t kComponentsPerPixel = 4; static const size_t kBitsPerComponent = sizeof(unsigned char) * 8; NSInteger layerHeight = 160; NSInteger layerWidth = 160; CGContextSaveGState(context); CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); size_t bufferLength = layerWidth * layerHeight * kComponentsPerPixel; unsigned char *buffer = malloc(bufferLength); // The real function does something more interesting with the buffer, but I cut it // to reduce the complexity while I figure out the crash. for (NSInteger i = 0; i < bufferLength; ++i) { buffer[i] = 255; } //memset(buffer, 255, bufferLength); CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, &buffer, bufferLength, NULL);//freeBitmapBuffer); CGImageRef imageRef = CGImageCreate(layerWidth, layerHeight, kBitsPerComponent, kBitsPerComponent * kComponentsPerPixel, kComponentsPerPixel * layerWidth, rgb, kCGBitmapByteOrderDefault | kCGImageAlphaLast, provider, NULL, false, kCGRenderingIntentDefault); CGContextDrawImage(context, CGRectMake(0, 0, 160, 160), imageRef); CGImageRelease(imageRef); CGDataProviderRelease(provider); CGColorSpaceRelease(rgb); CGContextRestoreGState(context); Later, when drawLayer:inContext: calls CGContextFillRect to display the pattern created by this function, I get EXC_BAD_ACCESS. The top of the stack is CGSConvertAlphaByte. I looked at the buffer's memory at that point, and it seemed fine - set to exactly what it was set to when the pattern function was called. I think that maybe I messed up some parameter of CGImageCreate, quite possibly the flags. Or the buffer is not populated in the right order, but I'm not
Tags (comma-separated)
Save Edits
Cancel