2011-01-19 6 views
8

ネットから画像をダウンロードしてUIImageViewに表示するのはかなり簡単です。ただし、これを行うには、イメージを完全にダウンロードしてからユーザーに表示する必要があり、プログレッシブJPEG(およびPNG)イメージを完全に破棄する必要があります。UIImageViewでプログレッシブJPEGをダウンロード中に表示するにはどうすればよいですか?

転送中に部分的にダウンロードされたイメージをレンダリングする方法を教えてください。私はイメージを更新するいくつかのコールバック関数を持っているSDKを想像するが、私はそのような関数を見つけることができません。現在のiOS SDKを使用することは可能ですか?

答えて

0

didReceiveDataが呼び出されると、UIImageを部分的にレンダリングしようとしましたか?以下のような何か...

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    //TODO: add some error handling in case the image could not be created 
    UIImage *img=[UIImage imageWithData:data]; 
    if (img) { 
     self.imageView.image=img; 
    } 
} 
+0

を見ますだから私は今の間そうするだろうと思う。それでも、イメージがまだダウンロードされていない領域を表示し、イメージの完全な再計算のためにraw libjpegのようにイメージを徐々に解凍するよりパフォーマンスが大幅に悪いように見えるのはちょっと醜いことです。 –

+0

もう1つのアプローチ(より良い方法だと思います)は、libjpeg(iOSで利用可能な場合)のようなライブラリを使用することです。 – versatilemind

10

私はこのポストは約1年持って知っているが、誰がそれを探しているだけの場合には、あなたが探しているものを行いNYXImagesKitというプロジェクトがあります。

のサブクラスであるNYXProgressiveImageViewという名前のクラスがあります。

あなたがしなければならないのは、次のとおりです。

NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init]; 
imgv.frame = CGRectMake(0, 0, 320, 480); 
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]]; 
[self.view addSubview:imgv]; 
[imgv release]; 

また、良いオプションは、それが低品質でロードされるようにinterlacedとしてあなたのイメージを保存して、ダウンロードを改善することです。画像がインターレースされていない場合は、上から下にロードされます。

+1

おかげさまで、 'ImageIO.framework'はそれを行うことができ、また異なるファイルタイプのものであっても知りませんでした。 –

+0

'NYXProgressiveImageView'はプログレッシブJPEGファイルの低品質部分をロードしません。一度ダウンロードすれば完全にイメージが表示されます。 – nickcheng

+0

Facebookのアプリとして進歩的ではなく、ベースラインだ。 – keywind

1

デコードと簡単にプログレッシブJPEGファイルを表示することができますのlibjpeg-turboがの上に小さなオープンソースのライブラリが用意されました:

let imageView = CCBufferedImageView(frame: ...) 
if let url = NSURL(string: "http://example.com/yolo.jpg") { 
    imageView.load(url) 
} 

は、私が予想ほど悪くは動作しませんhttps://github.com/contentful-labs/Concorde

関連する問題