如何把UIView转成UIImage,解决模糊失真问题
生活随笔
收集整理的這篇文章主要介紹了
如何把UIView转成UIImage,解决模糊失真问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近工作中,遇到一個需求,需要把一個UIView對象轉成UIImage對象顯示。經過網絡搜索,找到如下答案:
?| 1 2 3 4 5 6 7 8 | -(UIImage*)convertViewToImage:(UIView*)v{ ??? CGSize s = v.bounds.size; ??? UIGraphicsBeginImageContext(s); ??? [v.layer renderInContext:UIGraphicsGetCurrentContext()]; ??? UIImage*image = UIGraphicsGetImageFromCurrentImageContext(); ??? UIGraphicsEndImageContext(); ??? return image; } |
運行后發現,需求基本達到,但是有個問題,轉換后的UIImage顯示后會變模糊。因此猜測,這個方法適用于iPhone4之前的機型。iPhone4后,由于采用了Retain高清屏,在轉換時需要根據屏幕密度做個處理,又到到下面的答案:
| 1 2 3 4 5 6 7 8 | -(UIImage*)convertViewToImage:(UIView*)v{ ??? CGSize s = v.bounds.size; ??? UIGraphicsBeginImageContextWithOptions(s, NO, v.layer.contentsScale); ??? [v.layer renderInContext:UIGraphicsGetCurrentContext()]; ??? UIImage*image = UIGraphicsGetImageFromCurrentImageContext(); ??? UIGraphicsEndImageContext(); ??? return image; } |
運行后,問題依舊。于是跟蹤了一下contentsScale的值,發現也是1.0。這里我也不太清楚原因,本來是運行在Retain屏的設備上,為什么不是2.0。
只好自己修改成下面的樣子:
| 1 2 3 4 5 6 7 8 9 | -(UIImage*)convertViewToImage:(UIView*)v{ ??? CGSize s = v.bounds.size; ??? // 下面方法,第一個參數表示區域大小。第二個參數表示是否是非透明的。如果需要顯示半透明效果,需要傳NO,否則傳YES。第三個參數就是屏幕密度了 ??? UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale); ??? [v.layer renderInContext:UIGraphicsGetCurrentContext()]; ??? UIImage*image = UIGraphicsGetImageFromCurrentImageContext(); ??? UIGraphicsEndImageContext(); ??? return image; } |
變模糊和失真的問題解決了。
總結
以上是生活随笔為你收集整理的如何把UIView转成UIImage,解决模糊失真问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybaitis JdbcType 和
- 下一篇: STM32学习之路-SysTick的应用