2011-06-29 136 views
1

我正在研究一個允許跨越視頻幀(位圖)的應用程序。它也有能力逐幀播放這些幀,就好像您實際上在觀看由這些幀組成的視頻一樣。畫布繪製速度太慢

我有一個ImageView一次顯示一個位圖。我遇到的問題是將圖像繪製到ImageView(我們正在談論的只是對super.onDraw()的調用)需要大約30ms。由於幀需要以原始幀速率播放,這是一個問題。還有其他一些操作也正在進行,這些操作也會減慢過程,但繪圖當然無濟於事。

我正在研究OpenGL ES,但似乎並非所有設備都支持非功率爲2的圖像,所以這是行不通的。圖像的尺寸是該設備錄製的視頻分辨率的一半,因爲我以半尺寸對它們進行了採樣,並且幾乎保證不會成爲二次冪的圖像。

有什麼辦法可以加快速度,使繪圖更快?

回答

3

OpenGL ES 2.0強制支持兩種紋理的非功率,所以您可以安全使用它。如果你使用的是OpenGL ES 1.0,並且你沒有兩種支持的能力,那麼解決它非常容易(只需要創建兩個足夠大的紋理來容納你的npot圖像。)

注意:你應該簡介你的應用程序,看看你是否可以提高帆布的速度。也許你在縮小圖像的時間,也許它不是在兼容的配置和轉換髮生在運行時(例如565至8888)等。

+0

只是想補充一點,您還可以使用NPOT紋理,通過擴展到下一個冪次,創建紋理,然後縮放以進行渲染。 –

+0

雖然兩個功能的支持也不取決於設備的硬件嗎?我在看http://stackoverflow.com/questions/3881197/opengl-es-2-0-extensions-on-android-devices,它看起來像列出的Tegra 2設備不支持npot擴展。 – BigFwoosh

+0

哎呀,我的意思是非二的權力。 – BigFwoosh

0

我發現ImageView從未給我我正在尋找的幀率原因,我不知道)。對於這樣的事情,你應該改寫SurfaceView。這是一個更多的工作,但你肯定會看到幀率的提高,你會有更多的靈活性。顯然,你會想知道你的剪輯,並知道如果任何其他視圖覆蓋這一個,這也會導致顯着的減速(因爲覆蓋也將需要在每一幀重繪)。