3

カメラ(MJPEG)からネットワーク経由で一連のJPEGを受信して​​います。UIViewで受け取った画像を表示します。私が見ているのは、私のアプリがCPUの50%(デバイスとシミュレーターをテスト済み)をUIViewアップデートのように見えるものに費やしていることです。

この画面更新を行うためのCPU負荷の少ない方法はありますか?UIViewに渡す前に何らかの方法でJPEGを処理する必要がありますか?受信方法:

UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(),^{
    [cameraView updateVideoImage:image];
});

更新方法:

- (void) updateVideoImage:(UIImage*)image {
    myUIView.image = image;
    ...

ここに画像の説明を入力してください

更新:より良いスクリーンキャプチャを追加しました

update2:OpenGLは、JPEG用にレンダリングするためのより高速なサーフェスを提供しますか?インストゥルメントからは、時間が費やされている場所、レンダリングされている場所、またはデコードされている場所がわかりません。提案されたテストケースをまとめて、そこから作業します。

4

1 に答える 1

1

iOS は PNG 画像用に最適化されています。JPEG は送信用の画像のサイズを大幅に縮小しますが、はるかに複雑な形式であるため、このレンダリングに多くの時間がかかっても不思議ではありません。人々はデバイスに jpeg ハードウェア アシストがあると言っていますが、確かなことはわかりません。

だから - いくつかの提案。今持っている 1 つの jpeg を取得し、コンテキストとベースラインにレンダリングするテストを考案します。同じ画像を取得してプレビューで開き、わずかに異なる品質値で別のファイルに保存してみてください(プレビューは画像から不要な「ジャンク」を取り除くか、最初にpngに変換してから元に戻しますここでのアイデアは、Preview から出力された画像を使用することです.これは、あなたが得ようとしているのと同じくらいきれいな画像になるでしょう.画像はより良いですか?

また、libjpegturbo を使用して、画像をより高速にレンダリングできるかどうかを確認することもできます。このライブラリの動作は、github プロジェクトの PhotoScrollerNetwork で確認できます。jpeg を受信すると (そのライブラリを使用して) リアルタイムでデコードし、CATiledLayers を使用してズーム可能な表示をサポートするため、そのプロジェクトが役立つ場合があります。

于 2012-08-07T12:45:19.633 に答える