iOS 繪圖之drawImage

作者:Love@YR
鏈接:http://blog.csdn.net/jingqiu880905/article/details/51852382
請尊重原創,謝謝!

上一篇文章裏說的繪圖都是非常簡單的,如畫直線,畫貝塞爾曲線,畫圓,橢圓,描邊,填充等。
這篇針對圖片的簡單處理做個說明:
demo還是上篇的那個,不過ViewController讓其顯示DrawedImageView的view。
1.利用 UIImage 的 drawInRect方法繪圖。

因爲 UIImage 的 drawInRect屬於UIKit提供的繪圖,所以在image加入的view的drawRect裏不需要UIGraphicsGetCurrentContext來拿到cg上下文

drawInRect,drawAtPoint方法都會重新把這個圖片拷貝一份繪製到view上。所以調用幾次就有幾張圖,並沒有new多個img對象但效果顯示有多個圖片,當然最後我們生成的相當於這些圖在整個畫布上的一個整體截圖。
2. drawAsPatternInRect:rect 平鋪,即圖片sizeToFit(即圖片本身px/scale係數)顯示,如果還有空間,複製其自己,橫向和豎向排列。
3. 上面用UIImage自身的繪畫方式並不能分割圖片,只有把圖片轉換成CGImageRef才能進行分割。CGImage類屬於CoreGraphics框架,而CIImage類屬於CoreImage框架。到現在爲止我們還未討論過CoreImage框架。
用[uiimageObj CGImage]即可得到此圖片的CGImageRef

  CGImageRef marsLeft = CGImageCreateWithImageInRect([mars CGImage],CGRectMake(0,0,sz.width/2.0,sz.height));
    CGImageRef marsRight = CGImageCreateWithImageInRect([mars CGImage],CGRectMake(sz.width/2.0,0,sz.width/2.0,sz.height));

即可把一個CGImage按照想要的rect分割成多個。
4. 要把CGImage繪製在view上需要用CGContextDrawImage(ctx,rect,cgimgRef)方法,此動作如在drawRect裏,ctx就需要用UIGraphicsGetCurrentContext得到。
5. CGImageCreate 用完後需要手動release
6. CGImageGetWidth 可以拿到CGImageRef的真實尺寸。而uiimageObj的size是被系統壓縮後的尺寸,相當於調用了sizeToFit之後的尺寸而不是圖片原大小。
7. UIImage 的imageWithCGImage:cgImage scale:scale orientation:orientation方法傳入一個cgImag得到一個uiimage對象,可以自動修復圖片倒置的問題,還有壓縮的問題。因爲cgImag爲原圖大小,按照uiimage的scale去壓縮,得出來的uiimage的size纔會顯示正確。
8. 關於使用CGContextDrawImage繪製圖片倒置的問題解決辦法:
http://blog.csdn.net/ouyangtianhan/article/details/44225621

發佈了56 篇原創文章 · 獲贊 28 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章