CGBitmapContextGetData iOS 3.2和iOS 4.2之间的结果差异

时间:2011-06-17 11:37:08

标签: objective-c ios ipad core-graphics

我遇到了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上运行时返回正确的值

任何人都可以解释为什么结果不同,以及如何解决它?

感谢。

1 个答案:

答案 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()