如何把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;

}

变模糊和失真的问题解决了。

时间: 2024-10-03 22:15:46

如何把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()];    UIImag

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()];     UIIm

IOS将UIView转化为UIImage

+(UIImage*)createImageFromView:(UIView*)view { //obtain scale CGFloat scale = [UIScreen mainScreen].scale; 开始绘图,下面方法,第一个参数表示区域大小.第二个参数表示是否是非透明的.如果需要显示半透明效果,需要传NO,否则传YES.第三个参数就是屏幕密度了 UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.wi

将UIview描画成虚线等.

- (UIView *)lineView{ if (!_lineView) { _lineView = [UIView new]; // _lineView.backgroundColor = UIColorWithRGB(127, 127, 127); _lineView.frame = CGRectMake(5, 13.5 + 5.5 , totalWith / 2 - 5 - 23 -2 , 1); CAShapeLayer *shapeLayer = [CAShapeLayer laye

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

1.maven项目进入依赖 <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>core-renderer</artifactId> <version>R8pre2</version> </dependency> <dependency> <groupId>com.lowagie</groupId> &l

php导出csv格式数据,以及将数字转换成文本解决办法昨啄钻纂转钻

http://www.jiaoyou8.com/friends_diary/qingsiwen/0_0_0/view_0018947113_no_0_0.2015-01-31.html http://www.jiaoyou8.com/friends_diary/qingsiwen/0_0_0/view_0018947097_no_0_0.2015-01-31.html http://www.jiaoyou8.com/friends_diary/qingsiwen/0_0_0/view_00189

2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

本文用的是VS2013MFC写串口数据接收: 第一步:首先建立一个MFC工程,成功后会跳出一个对话框,直接在对话框上点击右键->点击插入ACTIVAE控件->选择MicrosoftCommunications Control, version 6.0 成功后会显示一个电话的图标在对话框上,运行起来不会显示的 不用担心这个美观问题.如果没有这个插件的话,可能是版本太低  可以自己下载一个补上 第二步:大概的窗体搞好:   那个显示图片的大框是PICTURE控件变量 然后就要项目->类向导中

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

<html xmlns:v="urn:schemas-microsoft-com:vml"><head> <meta http-equiv="x-ua-compatible" content="ie=7" charset='utf-8'/><title>无标题文档</title><style>img{ width:300px; height:200px;border: 1px

其他博文收藏

第三方框架: SDWebImage使用——一个可管理远程图片加载的类库 RegexKitLite 实现正则表达式 iPhone开发之全景展示(panoramagl) 富文本类库RTLabel MBProgressHUD提示框 EGOTableViewPullRefresh(一)实现下拉刷新 应用技术: iOS 检测版本更新 DataSingleton单例 如何把UIView转成UIImage,解决模糊失真问题 其他博文收藏