近期工作中,遇到一个需求,须要把一个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. head 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/11/06/2756278.html head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结 ...

  2. 测试storm异常信息(时时更新)

    Exception in thread "main" java.lang.RuntimeException: org.apache.thrift7.protocol.TProtoc ...

  3. java程序员认证考试题库

    第一部分 基础知识练习 目标 本章对应于<学生指南>各章的内容分别提供了练习题集,包括: ●  第一章Java入门 ●  第二章数据类型和运算符 ●  第三章流程控制与数组 ●  第四章封 ...

  4. 解决windows10 启动蓝屏 ntfs file system

    启动 --> 疑难解答 -->高级工具 --> 命令行--> chkdsk /x /f c: cd c: ok ^_-

  5. IntelliJ IDEA 2017.2.2 的破解 有效期 2116年

      破解三部曲 下载破解文件 JetbrainsCrack-2.6.6-release-enc.jar http://idea.lanyus.com/jar/JetbrainsCrack-2.6.6- ...

  6. python之函数用法__str__()

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法__str__() #http://www.cnblogs.com/hongfei/p ...

  7. PHP-各种下载安装

    Windows下常用PHP扩展下载: http://dev.freshsite.pl/php-accelerators.html http://windows.php.net/downloads/pe ...

  8. 让 linux centos 文件夹地址栏 位置栏显示出来的方法

    今天又拿起心爱的 linux ,发现多日不用又忘记了不少知识了    , 发现忘记的速度真是惊人的! 设置方法: 编辑-> 首选项-> 勾选 总是在浏览器窗口中打开,  如图:

  9. HDUOJ--4565 So Easy!

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  10. NYOJ----次方求模

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...