Bitmap優(yōu)化1

Bitmap優(yōu)化1:

Bitmap在內(nèi)存中創(chuàng)建過(guò)程

Bitmap bm = nativeCreate(null, 0, width, width, height, config.nativeInt, mutable, xyzD50, p);
// Bitmap.cpp L713
static jobject Bitmap_creator() {
    SkBitmap bitmap; // 相當(dāng)于new了個(gè)SkBitmap對(duì)象

    // 給圖片設(shè)置值:寬高,colorType
    bitmap.setInfo(SkImageInfo::Make(width,height,colorType, kPremul_SkAlphaType, colorSpace));
    sk_sp<Bitmap> nativeBitmap= Bitmap::allocateHeapBitmap(&bitmap, NULL);
}
    nativeBitmap=Bitmap::allocateHeapBitmap(bitma.get(), ctable);
    return createBitmap(env, nativeBitmap.release(),
        getPremulBitmapCreateFlags(isMutale), NULL, NULL, density);

在native區(qū)律罢,創(chuàng)建圖片對(duì)象(又寬高信息等)缓待。此圖片對(duì)象,被skBitmap所指向族沃。skBitmap的引用频祝,會(huì)以參數(shù)的形式傳遞到j(luò)ava。
private final long mNativePtr脆淹;// java層找不到這個(gè)內(nèi)存常空,但是又能操作這個(gè)內(nèi)存。如壓縮盖溺,獲取寬高等漓糙。
所有的native函數(shù),都需要這個(gè)long類型的mNativePtr烘嘱。

內(nèi)存分析

app內(nèi)存劃區(qū)-java:

  • 方法區(qū) code
  • 堆區(qū)
  • 棧區(qū)
  • Graphic: opengl昆禽,GPU內(nèi)存蝗蛙。

app內(nèi)存劃分-native:

  • 圖片

Bitmap底層渲染。

extern "c"
Java_com_maniu_bitmapmaniu_ImageHandler_updateFrame(JNIEnv *env, jobject thiz, jobject bitmap) {
    AndroidBitmapInfo info;
    int *pixels = NULL; // 指向naive層的圖片內(nèi)存區(qū)醉鳖。
    AndroidBitmap_getInfo(env, bitmap, &info);
    // CMakeList.txt中 的target_link_libraries添加:jnigraphics
    AndroidBitmap_lockPixels(env, bitmap, reinterpret_cast<void **>(&pixels)); // 鎖住內(nèi)存
    // pixels[0] = 0xFF0000; // 第一個(gè)點(diǎn)修改紅色
    int width = info.width;
    int height = info.height;

    int *px = pixels;
    int *line;
    for(int y=0; y<height; y++) { // 一行行的遍歷捡硅。
        line = px;
        for(int x=0; x<width; x++){
            line[x] = 0xFFFF0000; // 內(nèi)存區(qū)賦值。
        }
        // 切換到下一行, stride一行的字節(jié)數(shù)盗棵。(width = info.stride/4)壮韭,一個(gè)像素有4個(gè)字節(jié)。
        px = px + width;
    }

    // 解鎖
    AndroidBitmap_unlockPixels(env, bitmap);
}

Bitmap復(fù)用的前提條件纹因。

手寫(xiě)案例實(shí)現(xiàn)bitmap喷屋,渲染gif。

Bitmap使用的是java內(nèi)存瞭恰,還是native內(nèi)存屯曹?

------native內(nèi)存。

Bitmap直接在渲染引擎寄疏,native層是牢,而不是java層,避免通信陕截。
可以在native直接顯示渲染农曲。繪制最快乳规,性能最高笙以。

Gif加載:android-gif-drawable
系統(tǒng)源碼(external/giflib)

gif的 LZW壓縮猖腕,將所有像素匯總到一張表里面。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜡豹,隨后出現(xiàn)的幾起案子余素,更是在濱河造成了極大的恐慌,老刑警劉巖视乐,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彰檬,死亡現(xiàn)場(chǎng)離奇詭異逢倍,居然都是意外死亡碉哑,警方通過(guò)查閱死者的電腦和手機(jī)扣典,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門趁怔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)图柏,“玉大人蚤吹,你說(shuō)我怎么就攤上這事繁涂。” “怎么了矿酵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵棘捣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我百匆,道長(zhǎng),這世上最難降的妖魔是什么矩动? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任示姿,我火速辦了婚禮难裆,結(jié)果婚禮上褂痰,老公的妹妹穿的比我還像新娘缩歪。我一直安慰自己归薛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布匪蝙。 她就那樣靜靜地躺著主籍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪骗污。 梳的紋絲不亂的頭發(fā)上崇猫,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天沈条,我揣著相機(jī)與錄音需忿,去河邊找鬼。 笑死蜡歹,一個(gè)胖子當(dāng)著我的面吹牛屋厘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播月而,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汗洒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了父款?” 一聲冷哼從身側(cè)響起溢谤,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎憨攒,沒(méi)想到半個(gè)月后世杀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肝集,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年瞻坝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杏瞻。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡所刀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捞挥,到底是詐尸還是另有隱情浮创,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布砌函,位于F島的核電站斩披,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雏掠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一斩祭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乡话,春花似錦摧玫、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至闸婴,卻和暖如春坏挠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邪乍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工降狠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庇楞。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓榜配,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吕晌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛋褥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容