2010-12-15 9 views
8

私はiOSのは、アニメーションGIF-の処理方法に問題を抱えている分割することができませんでした。私はUIImageViewでアニメーションGIFを使用することはできませんし、UIImageViewでカスタムアニメーションを使用する必要があることを知っています。アニメーション、GIF画像はNSSocketてたNSDataとしてフレーム

しかし...

私はsocketstreamてGIF画像を送信するJavaサーバーを持っています。 iOS(iPhone)はそのストリームを受け取り、それをNSDataタイプに変換します。私はUIImageViewでこの画像をキャプチャして表示することに成功しましたが、多くの人が既に知っているように、最初のフレームのみが表示されます。

は、私はまた、別の画像にそのGIFを復号化するためにいくつかのコードを見つけましたが、そのコードはNSDataのGIFファイルからではなく動作します。

質問:どのように私はNSDataのは、別の画像にファイルをアニメーションとしてそれを使用するにNSArrayの中に置いて変換するのですか?

注:受信されたNSDataで画像と珍しい文字で区切られたテキストの両方です。 NSDataは次のようになります:[image] [separator] [text]。

ホープ誰かが私にで動作するようにいくつかのポインタまたはいくつかのサンプルを与えることができます...事前に

おかげで、私はあなたがデバイスをターゲットにしている場合を除き、あなたや私が答え:)

+0

アノミーからのコードに基づいて、アニメーション時間を処理するラッパーを作った、あなたの区切り文字もの間に存在します[テキスト]と次の[画像]を選択しますか? – Endemic

+0

まあ、私は1つのGIFイメージといくつかのテキストを送信します。だから、私は複数の(または1つの)フレームを送信し、次に区切り文字とテキストを送信します。したがって、テキストの後ろにはイメージがありません。 – stackr

答えて

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(@ "エラー:gifイメージの失敗"); } ' –

2

私はまた、1つのNSDataオブジェクトに複数の画像が存在するように見

https://gist.github.com/3894888

+0

これはまさに答えではありません。彼はラッパーへのリンクではなく、どのように求めています。 – Austin