2011-01-17 5 views
0

Я пытаюсь получить CGContextRef из UIImage. Всегда мой CGContextRef равен 0x0 в отладчике.Почему я не получаю CGContextRef

Вот код:

NSString *movName = imgName; 
     NSString *path = [[NSBundle mainBundle] pathForResource:movName ofType:@"png"]; 
     UIImage *image = [[UIImage alloc] initWithContentsOfFile:path]; 

     CGImageRef imageRef = [image CGImage]; 
     CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); 
     CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef); 

     CGContextRef bitmap = CGBitmapContextCreate(NULL, 
                100, 
                100, 
                CGImageGetBitsPerComponent(imageRef), 
                CGImageGetBytesPerRow(imageRef), 
                colorSpaceInfo, 
                bitmapInfo); 

спасибо за ответы

+0

Хороший вопрос ... Я стараюсь, потому что мое изображение UIImage *, которое я царапаю с диска, имеет размер 768x944 (и это размер, который я должен показать на экране), и из-за этого большого у меня проблемы с памятью. Я пробую много обходных решений и прихожу к этому с растровым изображением. Может быть, у вас есть идея о CGLayer и его использовании memeory? – xnz

+0

Похоже, что проблема заключается в том, что у вас ложь в другом месте. Любое текущее устройство Apple должно иметь возможность обрабатывать и отображать изображение 768x944 без особых трудностей. Приведенный выше код пытается создать пустую растровую карту размером 100x100, и я не думаю, что вы тоже этого хотите. Даже если вы изменили размер. UIImage использует CGImage за кулисами, поэтому вы все еще вернулись туда, где вы начали. Я бы посмотрел остальную часть вашей программы и посмотрел, может ли быть другое решение. – fbrereto

+0

@fbrereto: 100x100 предназначен только для тестирования, но theCGBitmapContextCreate() возвращает мне NULL. И да, возможно загрузить и отобразить изображение с 768x944, но это увеличивает память намного больше, чем изображение, скажем, 50x50. Если я загружаю и отпускаю 10 (или более) изображений, моя память идет на колени, потому что кажется, что релиз изображения никогда не освобождал память. – xnz

ответ

2

Результат NULL подробно описан в documentation:

Возвращаемое значение:
новый контекст точечного рисунка или NULL, если контекст не создан

Я бы начал с изучения параметров, которые вы передаете функции. Возможно, исходное изображение загружено неправильно. Вы пробовали отлаживать этот код? Что говорит вам отладчик?

+0

Изображение загружается. Но что значит правильно? Вот параметры, которые я передаю: CGImageGetBitsPerComponent = 8, CGImageGetBytesPerRow = 576, colorSpaceInfo = kCGColorSpaceDeviceRGB, bitmapInfo = 5. – xnz

Смежные вопросы