0

ネットワーク接続を介して一連の画像を受信して​​いますが、最大30FPSまでできるだけ速く表示したいと考えています。UIViewオブジェクトを派生させ(drawRectをオーバーライドできるように)、と呼ばれるUIImageプロパティを公開しましたcameraImage。フレームデータは必要なだけ速く到着しますが、実際の画面への描画には時間がかかりすぎ(setNeedsDisplayからの遅延の結果)、ビデオに遅延が生じ、他のコントロールとの対話が遅くなります。これを行うためのより良い方法は何ですか?私はOpenGLを使用することを考えましたが、私が見た唯一の例は、静止画像を画面に描画するためではなく、回転するポリゴンにテクスチャを追加するためのものです。

- (void)drawRect:(CGRect)rect
{
  CGContextRef context = UIGraphicsGetCurrentContext();

  CGRect screenBounds = [[UIScreen mainScreen] bounds];
  [self.cameraImage drawInRect:screenBounds];

  // Drawing code
  //CGContextDrawImage(context, screenBounds, [self.cameraImage CGImage]); // Doesn't help
}
4

1 に答える 1

3

CALayer画像に「」を設定してみてくださいcontents。または、比較的適切なパラメータで設定する場合は、UIImageView'sの設定imageがそれほど遅くなることはありません。

OpenGLは間違いなく代替手段ですが、操作がはるかに難しく、他の人と同じこと、つまりテクスチャのアップロード速度によって制限されます。

(あなたがそれをしている方法(描画drawRect:)では、UIKitにビットマップを割り当てさせ、次に画像をビットマップに描画し、次にビットマップをビデオハードウェアにアップロードする必要があります。仲介者をスキップして画像をアップロードするのが最善です可能であれば、直接。)

また、CGImageがどこから来たかにも依存する場合があります。それは生のビットマップデータによって裏付けられていますか(もしそうなら、どのような形式ですか?)、それともJPEGまたはPNGですか?画像をフォーマット変換またはデコードする必要がある場合は、時間がかかります。

また、CGImageの大きさはどれくらいですか?必要以上に大きくならないように注意してください。

于 2012-04-11T02:59:01.310 に答える