我遇到了iOS 3.2的问题,相同的代码在iOS 4.2上工作正常,但是3.2, CGBitmapContextGetData返回nil
我的代码:
CGContextRef context = CGBitmapContextCreate(
NULL,
image.size.width,
image.size.height,
8,
image.size.width * 4,
CGImageGetColorSpace(image.CGImage),
kCGImageAlphaPremultipliedLast
);
if (context != NULL)) {
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, image.size.width, image.size.height), image.CGImage);
UInt32 *contextData = CGBitmapContextGetData( context );
}
在iOS 3.2上运行时,contextData为nil,在iOS 4.2上运行时返回正确的值
任何人都可以解释为什么结果不同,以及如何解决它?
感谢。
答案 0 :(得分:1)
在iOS4之前,您必须自己从documentation
中明确分配内存数据
指向目的地的指针 绘图所在的记忆 渲染。这个记忆的大小 块至少应该是 (bytesPerRow * height)字节。在iOS 4.0中 后来,和Mac OS X v10.6和 之后,如果需要,可以传递NULL Quartz为内存分配内存 位图。这使您免于管理 你自己的记忆,减少记忆 泄漏问题。
所以你应该做类似
的事情unsigned char* dataPtr = (unsigned char*)malloc(image.size.height*image.size.width*4)
使用i.s.o.将NULL作为您的第一个参数,并在适当的时间free()
。