最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

安卓圖片反復(fù)壓縮后為什么普遍會變綠而不是其它顏色?

 更新時間:2018年12月12日 15:08:57   作者:franksight  
今天小編就為大家分享一篇關(guān)于安卓圖片反復(fù)壓縮后為什么普遍會變綠而不是其它顏色?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

業(yè)余版概要:

安卓的一個核心的部分的代碼,為了優(yōu)化執(zhí)行速度進(jìn)行了魔改,結(jié)果寫錯了代碼。結(jié)果導(dǎo)致 JPG 圖片壓縮發(fā)綠、崩壞。與安卓上的應(yīng)用無關(guān),它們是受害者

專業(yè)版概要:

問題出在 Android 提供的壓縮圖片接口上,準(zhǔn)確的說是一個 Android 里一個叫做 Skia 的庫上。而這個 bug 在 2016 年 4 月中旬被修復(fù)了,如果按照 Android 的發(fā)行來看,那就是從 Android 7 (Nougat) 開始才消除這個問題。

問題出在 RGB 色彩空間轉(zhuǎn)換到 YUV 的時候。但問題不僅僅是精度下降,最大的問題是,錯誤的舍入(向下取整)。

現(xiàn)在就要說到 Android 系統(tǒng)到底為什么出了這個問題了。Android 系統(tǒng)自起誕生以來就引入了名為 Skia 的圖像庫(Google 自家產(chǎn)品),用于處理圖像,其中包括把圖片壓縮成 JPEG(平時說的 JPG)。而 Skia 又是調(diào)用libjpeg-turbo 來實(shí)現(xiàn)真正的壓縮過程的。為了達(dá)到更好的壓縮效果,JPEG 算法本身,將通常屏幕上表示顏色的 RGB(紅綠藍(lán))數(shù)值,轉(zhuǎn)換為 YUV 數(shù)值(亮度,藍(lán)色分量,紅色分量)。正常情況下這個算法是輕微有損的。

但是 Skia 不走尋常路,在將這個變換算法的各個常數(shù)復(fù)制到自己的代碼里的時候(當(dāng)然是合法地),降低了精度,以達(dá)到更高的速度(專業(yè)準(zhǔn)確地說,從 16 位定點(diǎn)數(shù),降低到了 8 位定點(diǎn)數(shù)),這導(dǎo)致了更大的損傷。

最可怕的是……在進(jìn)行這個變換運(yùn)算的最后一步,需要除以 256,而代碼中,采用了右移操作代替除法以提高執(zhí)行速度。

假如我們是 Skia 開發(fā)者,如何修復(fù)這個問題?

交回給 libjpeg-turbo 庫自己來做色彩空間變換,把原本 Skia 庫 YUV 轉(zhuǎn)換代碼全部刪掉了,把這個過程留給整個過程最底層的 libjpeg-turbo庫自己來做,并且用默認(rèn)的 JDCT_ISLOW 方法代替JDCT_IFAST 方法。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

最新評論

麻栗坡县| 林西县| 罗山县| 定边县| 汉沽区| 玛纳斯县| 康马县| 六盘水市| 沂南县| 金华市| 云浮市| 射阳县| 平遥县| 永川市| 安泽县| 墨玉县| 光泽县| 祥云县| 滦南县| 浠水县| 琼结县| 灵石县| 竹山县| 青河县| 芦溪县| 清远市| 武鸣县| 清涧县| 阜新| 锡林浩特市| 兴宁市| 新和县| 松阳县| 红安县| 墨竹工卡县| 西乡县| 松潘县| 西贡区| 三都| 司法| 文化|