我有一個RGBA malloc編輯數據的原始位圖圖像;行顯然是4個字節的倍數。這些數據實際上源於AVI(24位BGR格式),但我將它轉換爲32位ARGB。每幀大約有8mb的32位數據(1920x1080)。有效的可可動畫w /原始位圖數據
對於每一幀:
- 我該幀的數據轉換成
NSData
對象經由NSData:initWithBytes:length
。 - 然後,我通過
CIImage:imageWithBitmapData:bytesPerRow:size:format:colorSpace
將其轉換爲CIImage
對象。 - 從那
CIImage
,我使用NSOpenGLView:drawImage:inRect:fromRect
將它繪製到我的最終NSOpenGLView
上下文中。由於目標圖像具有「馬賽克」特性,因此有大約15至20個來自各種源/目標Rects的調用。
使用30Hz的NSTimer
,關於NSOpenGLView
呼籲[self setNeedsDisplay:YES]
,我可以達到在2012 MacMini/2.6GHz的/ i7的約20-25fps - 這不是在30Hz堅如磐石。這是預期與NSTimer
而不是CVDisplayLink
。
但是......現在忽略NSTimer
問題,有沒有關於使這種逐幀渲染更高效一些的建議/指針?
謝謝!
注意:我想繼續使用CIImage
對象,因爲我想在某些時候訪問過渡效果。
更新:產生我的原代碼一幀約19.3ms。使用NSMutableData對象花了16.6ms。使用NSData:initWithBytesNoCopy花了14.6ms。所以...大約減少25%的運行時間。偉大的提示!謝謝。 – zzyzy