2010-11-28 8 views
1

私はiPad向けに書いているアプリケーションのプログラミングタスクを持っています。私はこの問題に近づくための良いアドバイスを期待しています。iOSでの動的イメージレンダリング

基本的には、私は256x192ピクセルイメージ用の生のRGBを格納するメモリバッファを持っています。この画像は定期的に書き込まれ、更新呼び出し時に画面の768x576ピクセルの領域に表示したいと考えています。私はこれを比較的速く、実際に変化する画像の領域だけを処理することによって最適化したいと考えています。

どうすればいいですか?私の最初の考えは、256x192イメージを管理するためのCGBitmapContextを作成し、このCGImageを作成し、これからUIImageを作成し、UIImageViewインスタンスのイメージプロパティを変更することです。これはかなり遅いプロセスのように聞こえる。

私は正しい行にいるのでしょうか、別のものを見ているべきですか?別の注意点は、このイメージが他のUIKitビューと画面上に共存している必要があることです。

ご協力いただきありがとうございます。

答えて

2

私の経験では、ビットマップコンテキストからイメージを取得するのは実際には非常に高速です。実際のパフォーマンスヒットがあれば、描画操作そのものになります。結果のイメージをスケーリングするので、最終的なサイズでビットマップコンテキストを作成し、最初にスケーリングされたすべてのイメージを描画して、より良い結果を得ることができます。

ただし、ビットマップコンテキストを使用する場合は、アルファチャンネル(RGBAまたはARGB)を追加する必要があります。CGBitmapContextはRGBのみをサポートしていないためです。

1

OK、私は解決策を考え出しました。私にビットマップコンテキストを使う自信を与えてくれたJustinに感謝します。最後に、私は、このコードのビットを使用する:

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (UInt8*)screenBitmap, sizeof(UInt32)*256*192, kCFAllocatorNull); 
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data); 
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB(); 

CGImageRef image = CGImageCreate(256, 192, 8, 32, sizeof(UInt32)*256, colourSpace, bitmapInfo, provider, 0, NO, kCGRenderingIntentDefault); 

CGColorSpaceRelease(colourSpace); 
CGDataProviderRelease(provider); 
CFRelease(data); 

self.image = [UIImage imageWithCGImage:image]; 

CGImageRelease(image); 

もscreenBitmapサイズ256x192の私のUInt32型配列であり、そして自己UIImageView派生オブジェクトであることに注意します。このコードはうまくいきますが、正しい方法ですか?

+0

あなたがCoreGraphicsの描画機能を必要としない場合、それはそれを行い、完全に正しいです。 –

関連する問題