當(dāng)我們?cè)?Android 中處理 Image 時(shí),常因?yàn)?Java 性能和效率問題導(dǎo)致達(dá)不到我們期望的效果,例如進(jìn)行Camera 采集視頻流的原始幀時(shí)我們需要每秒能夠獲取足夠的幀率才能流暢的顯示出來,這也是為什么美顏 SDK 和圖像識(shí)別等這類 SDK 都是基于 C / C++ 的原因之一。語言的特性也是關(guān)鍵因素點(diǎn),所以常常會(huì)在 Java 中調(diào)用 C / C++ 的 API 來進(jìn)行相關(guān)操作。

因最近工作需求是替代 Camera 的原始打視頻流,數(shù)據(jù)源是 Bitmap 格式的,如果使用 Java 的方法來進(jìn)行Bitmap 的旋轉(zhuǎn),轉(zhuǎn)換為 YUV 類型的 NV21 、YV12 數(shù)據(jù)的話,那么少說也要 15FPS 的視頻就尷尬的變成了5FPS的PPT幻燈片了。關(guān)于YUV的各種格式區(qū)別請(qǐng)見我的博客:直播必備之YUV使用總結(jié) —— Android常用的幾種格式:NV21/NV12/YV12/YUV420P的區(qū)別,而Google提供了一套Image處理的開源庫libyuv(科學(xué)上網(wǎng)),可高效的對(duì)各類Image進(jìn)行Rotate(旋轉(zhuǎn))、Scale(拉伸)和Convert(格式轉(zhuǎn)換)等操作。

libyuv官方說明

libyuv is an open source project that includes YUV scaling and conversion functionality.