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-05 19:20:40

UIView对象转成UIImage对象的相关文章

【代码分享——Java&Json】Json转成java对象,已经java对象转成Json对象

做记录用,肯定有地方不完整,先放着吧 [代码分享--Java&Json]Json转成java对象,已经java对象转成Json对象,布布扣,bubuko.com

将Clob对象转换成String对象

/** * 将Clob对象转换成String对象 * @param clob * @return * @throws SQLException * @throws IOException */ public static String ClobToString(Clob clob) throws SQLException, IOException{ String str=""; Reader reader=clob.getCharacterStream();//得到流 Buffered

jQuery 对象转成 DOM 对象

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type"

json字符串转json对象,json对象转换成java对象

@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @ResponseBody public void updateInvestorApplyAccountNo(HttpServletRequest request, HttpServletResponse response, @RequestBody String requestBody) { int num = 0;

Razor 将C#对象转换成Javascript对象, json还原被转码的字符 &amp;quot&#183;&#183; HTML转义符

Razor 将C#对象转换成Javascript对象 在Razor中使用Json字符串,特殊字符被自动转义(如:\"->") @{ var jsonStr = Html.Raw(JsonUtil.ToJson(VieBag.data)); } <script> var data = JSON.parse(@jsonStr); </script> ViewBag.Data = list; <script type="text/javascri

json字符串转成 json对象 json对象转换成java对象

import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 依赖包 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version></dependency> String r

JSON对象转成formData对象,formData对象转成JSON对象

在向后端请求时,如果上传的数据里存在file文件对象,需要用到表单提交,这时候我们需要将JSON对象,转成formData对象,具体见代码 const formData = new FormData(); Object.keys(params).forEach((key) => { formData.append(key, params[key]); }); 下面也有可能需要formData转JSON,代码如下: var jsonData = {}; formData.forEach((valu

把UIColor(纯色值)对象转化成UIImage对象

+ (UIImage *)createImageWithColor:(UIColor *)color andSize:(CGSize)size { CGRect rect=CGRectMake(0.0f, 0.0f, size.width, size.height); UIGraphicsBeginImageContext(size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithC

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