Разница в результатах CGBitmapContextGetData между iOS 3.2 и iOS 4.2 - PullRequest
1 голос
/ 17 июня 2011

У меня проблема с 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 равен nil, когдаработает на iOS 3.2 и возвращает правильное значение при работе на iOS 4.2

Кто-нибудь может объяснить, почему результат отличается, и как его решить?

Спасибо.

1 Ответ

1 голос
/ 17 июня 2011

До iOS4 вам приходилось выделять память самостоятельно, из документации

данные

указатель на пункт назначения в память, где должен быть рисунок оказаны. Размер этой памяти блок должен быть как минимум (bytesPerRow * height) байтов. В iOS 4.0 и позже, и Mac OS X v10.6 и позже вы можете передать NULL, если хотите Кварц, чтобы выделить память для битовая карта. Это освобождает вас от управления ваша собственная память, которая уменьшает память проблемы утечки.

Так что вы должны сделать что-то вроде

unsigned char* dataPtr = (unsigned char*)malloc(image.size.height*image.size.width*4)

используйте это i.s.o. NULL в качестве первого параметра и free() в соответствующее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...