2010-12-15 8 views
8

Mam problem ze sposobem, w jaki iOS obsługuje animowane pliki GIF. Wiem, że nie można używać animowanych GIF-ów na UIImageView i trzeba użyć niestandardowych animacji na UIImageView.Obrazy animowane GIF odebrane jako NSData przez NSSocket nie mogą podzielić ramek

Ale ..

Mam serwer Java, który wysyła GIF przez socketstream. System iOS (iPhone) odbiera ten strumień i konwertuje go na typ NSData. Udało mi się przechwycić i wyświetlić ten obraz w UIImageView, ale jak wielu z was już wie ... wyświetla tylko pierwszą klatkę.

Znalazłem także kod do dekodowania GIF-a na oddzielne obrazy, ale ten kod działa z pliku GIF, a nie z NSData.

Pytanie: Jak przekonwertować plik NSData na osobne obrazy i umieścić je w NSArray, aby użyć go jako animacji?

Uwaga: W otrzymanym pliku NSData znajdują się zarówno obraz, jak i tekst oddzielony rzadkim znakiem. więc NSData wygląda następująco: [image] [separator] [tekst].

urządzenia

nadzieję, że ktoś może dać mi jakieś wskazówki lub kilka próbek do pracy z ..

góry dziękuję, będę trzymać poszukiwania aż ty albo ja znajdzie odpowiedź :)

+0

Widząc, jak istnieje wiele obrazów w jeden obiekt NSData, to znak separatora również obecny pomiędzy [ tekst] i następujący [obraz]? – Endemic

+0

Cóż, wysyłam 1 obraz GIF i trochę tekstu. Wysyłam więc wiele (lub jedną) ramek, a następnie separator, a następnie tekst. Tak więc po tekście nie ma już obrazu. – stackr

Odpowiedz

14

ile jesteś kierowania przed IOS 4 użyj 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); 
} 
+0

Pracowałem dla mnie. Mam 'dane' według' // get absolute file path: NSString * gifPath = [[NSBundle mainBundle] pathForResource: @ "ajax-loader" ofType: @ "gif"]; if (! GifPath) { NSLog (@ "błąd: ścieżka pliku niepoprawna"); } NSError * error = nil; // pobierz bajtów obrazu: NSData * gifData = [NSData dataWithContentsOfFile: gifPath options: zero error: & error]; if (! GifData) { NSLog (@ "błąd:% @", błąd); // NSLog (@ "błąd: błąd obrazu gif"); } ' –

2

Zrobiłem opakowanie, które również obsługuje czasu animacji opartej na kodzie od anomii

https://gist.github.com/3894888

+0

To nie jest dokładnie odpowiedź. Pyta, jak, nie o link do paczki. – Austin

Powiązane problemy