近期工作中,遇到一个需求,须要把一个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. 创建线程安全的单例(ARC或 非ARC)

    一:创建 宏 文件 SynthesizeSingleton.h SynthesizeSingleton.h #if __has_feature(objc_arc) // ARC Version #de ...

  2. js随机码之乱序数组

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. kafka delete topic

    Don't think it is supported yet. Take a look at this JIRA tracking Delete Topic. For delete manually ...

  4. 玩转oracle学习第五天

     1.上节回想 2.维护数据的完整性 3.管理索引 4.管理权限和角色 1.掌握维护oracle数据完整性的技巧  2.理解索引的概念,会建立索引  3.管理oracle的权限和角色   介绍:维 ...

  5. SVN、TortoiseSVN相关问题

    主要记录一些日常操作出现的问题: 1.upgrade working copy: SVN客户端升级或降级的时候,在本地已经下载workspace右键会显示upgrade working copy. 无 ...

  6. MySQL中int(5) 中的5代表什么意思?

    对于INT型,MySQL支持指定显示宽度例如:int(5):表示如果数值宽度小于5位,则填满宽度,保证总宽度为5位.默认为int(11),配合zerofill可以看到效果. DROP TABLE IF ...

  7. webapp 里主要的 mate 用途

    一.meta 标签分两大部分:HTTP 标题信息(http-equiv)和页面描述信息(name). 1.http-equiv 属性的 Content-Type 值(显示字符集的设定) 说明:设定页面 ...

  8. uniq命令 (转)

    uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用.也就是说,为了使uniq起作用,所有的重复行必须是相邻的. uniq语法 [root@www ~]# uniq [-icu] ...

  9. [Done]mysql in (#{list}) 只能查询/删除第一条的问题

    数据如下(注意age是int类型): sql如下(注意是#不是$): java代码: Mybatis日志(只返回一笔记录): 直接在mysql中执行(age是int类型,注意参数带引号,确认jdbc是 ...

  10. nginx1.9+新增tcp/udp代理stream

    [root@rhel nginx-]# ./configure --help --help print this message --prefix=PATH set installation pref ...