日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何把UIView转成UIImage,解决模糊失真问题

發布時間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何把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,解决模糊失真问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。