2010-12-15 43 views
8

我遇到的麻煩了iOS的處理動畫-GIF的。我知道你不能在UIImageView上使用動畫-GIF,你必須在UIImageView上使用自定義動畫。動畫,GIF圖像作爲NSData的通過NSSocket無法分割幀

但是...

我有通過socketstream發送GIF圖像Java服務器。 iOS(iPhone)接收該流並將其轉換爲NSData類型。我成功地在UIImageView中捕獲和顯示這個圖像,但是很多人已經知道它只顯示第一幀。

我也發現了一些代碼到GIF成單獨的圖像進行解碼,但代碼GIF文件,而不是NSData的作品。

問:如何轉換NSData的文件轉換成單獨的圖像,並將它們放入一個NSArray使用它作爲動畫?

注意:在所接收的NSData的都是圖像和一些文字由一種罕見的字符分隔。所以NSData看起來像這樣:[image] [separator] [text]。

希望有人可以給我一些指點或一些樣品事先與工作..

謝謝,我將繼續尋找,直到你或我找到一個答案:)

+0

看作爲有在一個NSData對象的多個圖像的動畫時間,是你的分隔符之間也存在於[文字]和以下[圖像]? – Endemic 2010-12-15 18:30:56

+0

嗯,我發送1個GIF圖像和一些文本。所以我發送多個(或一個)幀,然後是分隔符,然後是文本。因此,文本後面沒有更多圖像。 – stackr 2010-12-16 07:35:54

回答

14

除非你的目標設備在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); 
} 
+0

爲我工作。我通過'//獲取'data'獲取絕對文件路徑: NSString * gifPath = [[NSBundle mainBundle] pathForResource:@「ajax-loader」ofType:@「gif」]; 如果 { 的NSLog(@ 「錯誤:文件路徑不正確」)(gifPath!); } NSError * error = nil; //獲得圖像字節: NSData * gifData = [NSData dataWithContentsOfFile:gifPath options:nil error:&error]; 如果 { 的NSLog(@ 「錯誤:%@」,錯誤)(gifData!); // NSLog(@「error:gif image failure」); }' – 2012-09-21 10:12:10

2

我製成的包裝,還處理基於所述代碼從失範

https://gist.github.com/3894888

+0

這不完全是一個答案。他問的是如何,而不是一個包裝的鏈接。 – Austin 2012-10-15 20:02:00