2013-02-06 204 views
16

的失去質量,我嘗試使用擦除圖像下面的代碼drawInRect:圖像分辨率

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

但我只是看看圖片失去其分辨率因drawInRect

BeforeAfter

+0

上傳「之前」和「之後」屏幕顯示圖像會有很大的幫助,包括視覺效果的問題。 – dasblinkenlight

+0

上傳圖片請參照 –

+0

目前尚不清楚「圖像分辨率質量下降」的含義。也許你可以嘗試更具體些。 – ipmcc

回答

38

您應該UIGraphicsBeginImageContextWithOptions而不是UIGraphicsBeginImageContext走,這樣可以指定一個比例係數。

例如,這將使用設備的主屏幕的比例因子:

UIGraphicsBeginImageContextWithOptions(imgForeground.frame.size, NO, 0); 
+0

如果圖像不是Window的大小怎麼辦? 比用什麼來替換imgForeground.window.screen.scale –

+0

嗨!那麼,第三個參數是比例尺,而不是任何尺寸(即尺寸)!對於沒有Retina顯示器的所有iPhone,iPodTouch等,它將返回1.0f,而Retina顯示設備將提供2.0f。 –

+1

用'[[UIScreen mainScreen] scale]'替換'imgForeground.window.screen.scale'',所以更清楚的是「屏幕」的縮放意味着什麼! –