4.5 拉伸過濾

2018-02-24 14:50 更新

拉伸過濾

????最后我們?cè)賮碚務(wù)?code>minificationFilter和magnificationFilter屬性??偟脕碇v當(dāng)我們視圖顯示一個(gè)圖片的時(shí)候都應(yīng)該正確地顯示這個(gè)圖片意即以正確的比例和正確的11像素顯示在屏幕上。原因如下

  • 能夠顯示最好的畫質(zhì)像素既沒有被壓縮也沒有被拉伸。
  • 能更好的使用內(nèi)存因?yàn)檫@就是所有你要存儲(chǔ)的東西。
  • 最好的性能表現(xiàn)CPU不需要為此額外的計(jì)算。

????不過有時(shí)候顯示一個(gè)非真實(shí)大小的圖片確實(shí)是我們需要的效果。比如說一個(gè)頭像或是圖片的縮略圖再比如說一個(gè)可以被拖拽和伸縮的大圖。這些情況下為同一圖片的不同大小存儲(chǔ)不同的圖片顯得又不切實(shí)際。

????當(dāng)圖片需要顯示不同的大小的時(shí)候有一種叫做拉伸過濾的算法就起到作用了。它作用于原圖的像素上并根據(jù)需要生成新的像素顯示在屏幕上。

????事實(shí)上重繪圖片大小也沒有一個(gè)統(tǒng)一的通用算法。這取決于需要拉伸的內(nèi)容放大或是縮小的需求等這些因素。CALayer為此提供了三種拉伸過濾方法他們是

  • kCAFilterLinear
  • kCAFilterNearest
  • kCAFilterTrilinear

????minification縮小圖片和magnification放大圖片默認(rèn)的過濾器都是kCAFilterLinear這個(gè)過濾器采用雙線性濾波算法它在大多數(shù)情況下都表現(xiàn)良好。雙線性濾波算法通過對(duì)多個(gè)像素取樣最終生成新的值得到一個(gè)平滑的表現(xiàn)不錯(cuò)的拉伸。但是當(dāng)放大倍數(shù)比較大的時(shí)候圖片就模糊不清了。

????kCAFilterTrilinearkCAFilterLinear非常相似大部分情況下二者都看不出來有什么差別。但是較雙線性濾波算法而言三線性濾波算法存儲(chǔ)了多個(gè)大小情況下的圖片也叫多重貼圖并三維取樣同時(shí)結(jié)合大圖和小圖的存儲(chǔ)進(jìn)而得到最后的結(jié)果。

????這個(gè)方法的好處在于算法能夠從一系列已經(jīng)接近于最終大小的圖片中得到想要的結(jié)果也就是說不要對(duì)很多像素同步取樣。這不僅提高了性能也避免了小概率因舍入錯(cuò)誤引起的取樣失靈的問題

圖4.15 對(duì)于沒有斜線的小圖來說最近過濾算法要好很多

????總的來說對(duì)于比較小的圖或者是差異特別明顯極少斜線的大圖最近過濾算法會(huì)保留這種差異明顯的特質(zhì)以呈現(xiàn)更好的結(jié)果。但是對(duì)于大多數(shù)的圖尤其是有很多斜線或是曲線輪廓的圖片來說最近過濾算法會(huì)導(dǎo)致更差的結(jié)果。換句話說線性過濾保留了形狀最近過濾則保留了像素的差異。

????讓我們來實(shí)驗(yàn)一下。我們對(duì)第三章的時(shí)鐘項(xiàng)目改動(dòng)一下用LCD風(fēng)格的數(shù)字方式顯示。我們用簡(jiǎn)單的像素字體一種用像素構(gòu)成字符的字體而非矢量圖形創(chuàng)造數(shù)字顯示方式用圖片存儲(chǔ)起來而且用第二章介紹過的拼合技術(shù)來顯示如圖4.16。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)