Анимированные GIF-изображения, полученные в виде NSData через NSSocket, не могут разбивать кадры - PullRequest
8 голосов
/ 15 декабря 2010

У меня проблемы с тем, как iOS обрабатывает анимированные GIF-файлы. Я знаю, что вы не можете использовать анимированные GIF-файлы в UIImageView, и вы должны использовать пользовательские анимации в UIImageView.

Но ..

У меня есть сервер Java, который отправляет GIF-изображения через сокет-поток. IOS (iPhone) получает этот поток и преобразует его в тип NSData. Мне удалось захватить и отобразить это изображение в UIImageView, но, как многие из вас уже знают ... он отображает только первый кадр.

Я также нашел некоторый код для декодирования этого GIF в отдельные изображения, но этот код работает из файла GIF, а не NSData.

Вопрос: Как преобразовать файл NSData в отдельные изображения и поместить их в массив NSArray, чтобы использовать его в качестве анимации?

Примечание: в полученных NSData есть и изображение, и некоторый текст, разделенные редким символом. поэтому NSData выглядит следующим образом: [изображение] [разделитель] [текст].

Надеюсь, кто-нибудь может дать мне несколько указателей или несколько примеров для работы ..

Заранее спасибо, я буду продолжать поиск, пока вы или я не найдете ответ:)

Ответы [ 2 ]

14 голосов
/ 25 февраля 2011

Если вы не ориентируетесь на устройства до IOS 4, используйте ImageIO.

NSMutableArray *frames = nil;
CGImageSourceRef src = CGImageSourceCreateWithData((CFDataRef)data, NULL);
if (src) {
    size_t l = CGImageSourceGetCount(src);
    frames = [NSMutableArray arrayWithCapacity:l];
    for (size_t i = 0; i < l; i++) {
        CGImageRef img = CGImageSourceCreateImageAtIndex(src, i, NULL);
        if (img) {
            [frames addObject:[UIImage imageWithCGImage:img]];
            CGImageRelease(img);
        }   
    }   
    CFRelease(src);
}
2 голосов
/ 15 октября 2012

Я сделал оболочку, которая также обрабатывает время анимации на основе кода от Anomie

https://gist.github.com/3894888

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