加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 对CGImageCreate的正确调用是什么样的,如果它的

发布时间:2020-12-16 05:39:00 所属栏目:百科 来源:网络整理
导读:我试图在内存中创建一个位图,作为模式函数的一部分,drawLayer:inContext:方法(这个方法是CALayer委托协议的一部分)将被调用.模式功能与此类似: static const size_t kComponentsPerPixel = 4;static const size_t kBitsPerComponent = sizeof(unsigned ch
我试图在内存中创建一个位图,作为模式函数的一部分,drawLayer:inContext:方法(这个方法是CALayer委托协议的一部分)将被调用.模式功能与此类似:
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,160,160),imageRef);

CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(rgb);     

CGContextRestoreGState(context);

之后,当drawLayer:inContext:调用CGContextFillRect来显示由这个函数创建的模式时,我得到EXC_BAD_ACCESS.堆栈的顶部是CGSConvertAlphaByte.那时我看着缓冲区的内存,似乎很好 – 设置为调用模式函数时设置的内容.

我认为也许我搞砸了CGImageCreate的一些参数,很可能是标志.或者缓冲区没有以正确的顺序填充,但是如果我用相同的值填充每个字节,我不知道我怎么会出错.

任何类似的代码的想法或例子是非崩溃的?

解决方法

好的,所以苹果开发者论坛发现了错误:由于某些原因而不是缓冲区,我正在传递缓冲区.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读