drawInRect:失去图像分辨率的质量
Posted
技术标签:
【中文标题】drawInRect:失去图像分辨率的质量【英文标题】:drawInRect: losing Quality of Image resolution 【发布时间】:2013-02-06 12:23:45 【问题描述】:我正在尝试使用以下代码擦除图像
CGColorRef strokeColor = [UIColor whiteColor].CGColor;
UIGraphicsBeginImageContext(imgForeground.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[imgForeground.image drawInRect:CGRectMake(0, 0, imgForeground.frame.size.width, imgForeground.frame.size.height)];
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, 10);
CGContextSetStrokeColorWithColor(context, strokeColor);
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextBeginPath(context);
CGContextMoveToPoint(context, lastPoint.x, lastPoint.y);
CGContextAddLineToPoint(context, currentPoint.x, currentPoint.y);
CGContextStrokePath(context);
imgForeground.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但我只是发现 Image 由于 drawInRect 而失去了分辨率。
【问题讨论】:
上传“之前”和“之后”的屏幕截图对于涉及视觉效果的问题有很大帮助。 图片上传请参考 不清楚您所说的“失去图像分辨率的质量”是什么意思。也许你可以尝试更具体一点。 【参考方案1】:您应该使用UIGraphicsBeginImageContextWithOptions
而不是UIGraphicsBeginImageContext
,以便可以指定比例因子。
例如,这将使用设备主屏幕的比例因子:
UIGraphicsBeginImageContextWithOptions(imgForeground.frame.size, NO, 0);
【讨论】:
图片不是窗口大小怎么办?比用 imgForeground.window.screen.scale 代替什么 嗨!好吧,第三个参数是比例而不是任何维度(即大小)!对于所有没有 Retina Displays 的 iPhone、iPodTouches 等,它将返回 1.0f,而 Retina Display 设备将返回 2.0f。 replace 'imgForeground.window.screen.scale' 为 '[[UIScreen mainScreen] scale]',这样“屏幕”的比例就更清楚了! 第三个参数可以简单的0
,表示会自动选择比例(Cocoa中的常用约定)以上是关于drawInRect:失去图像分辨率的质量的主要内容,如果未能解决你的问题,请参考以下文章