2013-02-06 2 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

안녕하세요! 세 번째 매개 변수는 크기이고 크기 (예 : 크기)가 아닙니다. 레티 나 디스플레이가없는 모든 아이폰, 아이팟 터치 등의 경우 망막 디스플레이 장치는 1.0f를, 망막 디스플레이 장치는 2.0f를 반환합니다. –

+1

'imgForeground.window.screen.scale'을 '[[UIScreen mainScreen] scale]'로 바꾸십시오. 따라서 "screen"의 크기가 의미가 명확 해집니다! –