把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();

   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;

}

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

时间: 2024-10-09 15:54:20

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

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

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

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控件变量 然后就要项目->类向导中

其他博文收藏

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