解决各种view转image的时候图片变模糊的问题
2017-08-05 10:52
330 查看
最近工作中,遇到一个需求,需要把一个UIView对象转成UIImage对象显示。经过网络搜索,找到如下答案:
-(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高清屏,在转换时需要根据屏幕密度做个处理,又到到下面的答案:
-(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。
只好自己修改成下面的样子:
-(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;
}
变模糊和失真的问题解决了。
-(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高清屏,在转换时需要根据屏幕密度做个处理,又到到下面的答案:
-(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。
只好自己修改成下面的样子:
-(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;
}
变模糊和失真的问题解决了。
相关文章推荐
- 解决imageView加载图片时候造成内存溢出的问题
- 由于Android列表视图复用到之后的Imageview异步加载图片时候闪烁问题
- android 解决按钮、imageView 背景图片拉伸变大的问题
- 解决CircleImageView不能用Afinal的FinalBitmap加载网络图片问题
- 自定义控件工作的时候会影响标题textview的文字出现锯齿显得很模糊问题解决方案
- ImageView 无法显示图片问题解决办法
- 解决UITableView中image加载不同宽度尺寸图片的问题
- Android ImageView 不显示JPEG图片的问题解决
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
- android加载大图推荐框架LargeImageView及所遇问题——部分机型图片模糊
- ImageView.setImageURI()方法 图片界面不更新问题解决方案
- 解决Android当中GridView的Item子控件中有ImageView图片大小不一致问题,动态设置ImageView控件大小
- qq7.0的视频动态图登录界面实现讲解解决videoview黑屏问题解决图片视频各种手机适配与缩放衔接问题
- ImageView的几种对图片的缩放处理 解决imageview放大图片后失真问题解决办法
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
- 使用Rectangle+ImageBrush来代替Image,解决图片模糊的问题
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
- Android在打开一个新的Activity浏览大图时使用ImageView/PhotoView的时候图片显示在屏幕上部的问题
- Glide加载CircleImageView自定义圆形图片时解决不能加载成圆形图片问题