Динамическая визуализация изображений на iOS - PullRequest
1 голос
/ 28 ноября 2010

У меня есть задача по программированию приложения, которое я пишу для iPad, и в документации не ясно, как это сделать.Я надеюсь получить несколько полезных советов по решению этой проблемы.

По сути, у меня есть буфер памяти, в котором хранится необработанный RGB для изображения с разрешением 256x192 пикселей.Это изображение будет регулярно записываться, и я хочу отобразить его в области размером 768x576 пикселей на экране при вызове обновления.Я хотел бы, чтобы это было относительно быстро и, возможно, оптимизировало его, обрабатывая только те области изображения, которые действительно меняются.

Как бы я поступил так?Моя первоначальная мысль - создать CGBitmapContext для управления изображением 256x192, затем создать из него CGImage, затем создать из него UIImage и изменить свойство изображения экземпляра UIImageView.Это звучит как довольно медленный процесс.

Я на правильных линиях или я должен смотреть на что-то другое.Еще одно замечание: это изображение должно сосуществовать с другими представлениями UIKit на экране.

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 2 ]

2 голосов
/ 28 ноября 2010

По моему опыту, получение изображения из растрового контекста на самом деле очень быстро.Настоящим ударом по производительности, если таковой будет, будут сами операции рисования.Поскольку вы масштабируете результирующее изображение, вы можете получить лучшие результаты, создав контекст растрового изображения в конечном размере и начертив все масштабированное для начала.

Однако если вы используете контекст растрового изображения, вы должны сделатьОбязательно добавьте альфа-канал (RGBA или ARGB), так как CGBitmapContext не поддерживает только RGB.

1 голос
/ 28 ноября 2010

ОК, я придумала решение. Спасибо Джастину за предоставленную мне уверенность в использовании растровых контекстов. В конце концов я использовал этот бит кода:

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (UInt8*)screenBitmap, sizeof(UInt32)*256*192, kCFAllocatorNull);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data);
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();

CGImageRef image = CGImageCreate(256, 192, 8, 32, sizeof(UInt32)*256, colourSpace, bitmapInfo, provider, 0, NO, kCGRenderingIntentDefault);

CGColorSpaceRelease(colourSpace);
CGDataProviderRelease(provider);
CFRelease(data);

self.image = [UIImage imageWithCGImage:image];

CGImageRelease(image);

Также обратите внимание, что screenBitmap - это мой массив UInt32 размером 256x192, а self - объект, производный от UIImageView. Этот код работает хорошо, но это правильный способ сделать это?

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