2010-11-28 71 views
1

我爲iPad編寫的應用程序有編程任務,並且文檔不清楚如何執行此操作。我希望在解決這個問題上提供一些很好的建議。iOS上的動態圖像渲染

基本上,我有一個內存緩衝區,存儲256x192像素圖像的原始RGB。此圖像將定期寫入,我希望在更新呼叫時將其顯示在屏幕上的768x576像素區域。我希望這可以相對較快,也可以通過僅處理實際更改的圖像區域來優化。

我該怎麼做呢?我最初的想法是創建一個CGBitmapContext來管理256x192圖像,然後從中創建一個CGImage,然後從中創建一個UIImage並更改UIImageView實例的圖像屬性。這聽起來像一個相當緩慢的過程。

我在正確的路線上,還是應該看看不同的東西。另一點需要注意的是,該圖片必須與屏幕上的其他UIKit視圖共存。

感謝您提供的任何幫助。

回答

2

根據我的經驗,從位圖上下文獲取圖像其實很快。如果有的話,真正的表現將會在繪圖操作中出現。由於縮放了合成圖像,因此您可以通過以最終大小創建位圖上下文並繪製縮放開始的所有內容來獲得更好的結果。

但是,如果確實使用位圖上下文,則必須確保添加Alpha通道(RGBA或ARGB),因爲CGBitmapContext不支持RGB。

1

好的,我想出了一個解決方案。感謝賈斯汀讓我有信心使用位圖上下文。最後,我使用的該位的代碼:

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是我的尺寸256×192的陣列UInt32的,自我是一個UIImageView派生的對象。這段代碼運行良好,但它是正確的做法嗎?

+0

是的。如果你不需要CoreGraphics的繪圖功能,那就可以了,而且是完全正確的。 – 2010-11-28 07:39:50