【问题标题】:CGBitmapContextGetData result difference between iOS 3.2 and iOS 4.2iOS 3.2 和 iOS 4.2 的 CGBitmapContextGetData 结果差异
【发布时间】:2011-06-17 11:37:07
【问题描述】:

我在使用 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 );
}

contextData 在 iOS 3.2 上运行时为 nil,在 iOS 4.2 上运行时返回正确的值

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

谢谢。

【问题讨论】:

    标签: objective-c ios ipad core-graphics


    【解决方案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() 它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      相关资源
      最近更新 更多