近期工作中,遇到一个需求,须要把一个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();
   returnimage;
}

执行后发现。需求基本达到,可是有个问题,转换后的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();
   returnimage;
}

执行后,问题依然。于是跟踪了一下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();
   returnimage;
}

变模糊和失真的问题攻克了。

把UIView转成UIImage,解决模糊失真问题的更多相关文章

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

    最近工作中,遇到一个需求,需要把一个UIView对象转成UIImage对象显示.经过网络搜索,找到如下答案: ? 1 2 3 4 5 6 7 8 -(UIImage*)convertViewToIma ...

  2. 将UIView转成UIImage,将UIImage转成PNG/JPG

    分类: UIImageView2013-03-12 17:37 350人阅读 评论(0) 收藏 举报 //UIView -> UIImage #import “QuartzCore/Quartz ...

  3. pdf转换成文本解决格式不统一问题

    pdf转换成文本解决格式不统一问题 懒得调OCR服务了,所以快速解决的方法是: pdf转png:https://pdf2png.com/zh/ png转统一格式pdf:adobe acrobat自带增 ...

  4. jpg、png格式的图片转换成webp后颜色失真的问题

    今天简单的试用了一下 cweb.exe 将 jpg, png 格式的图片转换成 webp 格式. 我今天下载的是当前最新版:1.0.0 cwebp 3.jpg  -q 85 -o 3.webp 发现图 ...

  5. 将UIview描画成虚线等.

    - (UIView *)lineView{ if (!_lineView) { _lineView = [UIView new]; // _lineView.backgroundColor = UIC ...

  6. 解决位图失真-SetStretchBltMode()

    当用以下函数加载一张位图时,当窗口发生重绘更改大小时,位图将失真: CBitmap bitmap;  bitmap.LoadBitmap(IDB_BITMAP2); BITMAP bmp;  bitm ...

  7. IOS将UIView转化为UIImage

    +(UIImage*)createImageFromView:(UIView*)view { //obtain scale CGFloat scale = [UIScreen mainScreen]. ...

  8. 利用itext将html页面转成pdf(不模糊)

    1.maven项目进入依赖 <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId> ...

  9. ie兼容图片缩小后模糊失真(锯齿)问题

    解决IE下图片缩小失真(有锯齿)的问题   首先,这不是一个新鲜玩意儿,很多大牛08年就发现了. 其次,这是个所有IE下普遍都会遇到的问题,而非只针对于IE67.(百度了一下,大半左右的文章是针对于I ...

随机推荐

  1. java.lang.NoClassDefFoundError: com.baidu.mapapi.BMapManager

    解决方案:一.右击项目->properties->Java Build Path->Order and Export,在需要引用的包前面打勾.二.Project->Clean. ...

  2. Facebook 开源动画库 pop

    官网:https://github.com/facebook/pop Demo: https://github.com/callmeed/pop-playground 一:pop的基本构成: POPP ...

  3. interllij13新建maven web工程

    1. 打开intellij,左边的可以别管它(历史) ②选择create new project(新建一个项目),选择Maven,并选择一个web模板,然后next. 3. 给自己的项目取名,grou ...

  4. Linux内核3.11的socket busy poll机制避免睡眠切换

    Linux的网络协议栈很独立,上下通过两个接口分别和用户态以及设备相连.也能够看作是北向和南向接口...北向通过socket接口,南向通过qdisc接口(你能够觉得是上层的netdev queue,对 ...

  5. linux too many open files报错

    修改方法:vi /etc/security/limits.conf  增加一行,如下: *       -       nofile          65535 修改vi /etc/ssh/sshd ...

  6. CentOS 6.8 ftp服务安装配置 基于本地用户和虚拟用户

    CentOS 6.8 ftp服务安装配置 基于本地用户和虚拟用户 一.安装ftp服务 1.检查是否已经安装 # rpm -qa | grep ftp ftp-0.17-54.el6.x86_64 vs ...

  7. Android 线性布局(LinearLayout)相关官方文档 - 指南部分

    Android 线性布局(LinearLayout)相关官方文档 - 指南部分 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用 ...

  8. 用Canvas为网页加入动态背景

    近期刚刚接到为微信公众帐号"玩转三里屯"制作首页的任务. 考虑到页面仅仅在手机中浏览.并且手机对canvas的支持又很好,所以打算使用canvas做点不一样的动画. 首先来看下效果 ...

  9. Mac 通过活动监视器关闭卡死进程

    前言: 心好累,Lantern太不省事了 之前装过之后,就设定了开启自启动,搞得我上网都受影响(这玩意,qq没事,但是网易云之类的一些软件上网都不行了...就是这玩意搞的鬼) 没办法,点击关闭吧... ...

  10. js Circle类

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...