2013-02-06 27 views
16

próbuję wymazać obraz za pomocą następującego kodudrawInRect: utraty jakości Rozdzielczość obrazu

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

Ale ja po prostu dowiedzieć się obraz traci swoją uchwałę z powodu drawInRect.

BeforeAfter

+0

przesłaniem „przed” i „po” zdjęcia screenshot byłoby bardzo pomocne na pytanie udziałem wizualizacje. – dasblinkenlight

+0

Zdjęcie przesłane Proszę zapoznać się z –

+0

Nie jest jasne, co rozumiesz przez "utratę jakości rozdzielczości obrazu". Być może mógłbyś spróbować być bardziej konkretny. – ipmcc

Odpowiedz

38

Powinieneś iść z UIGraphicsBeginImageContextWithOptions zamiast UIGraphicsBeginImageContext tak, że współczynnik skalowania może być określona.

Na przykład, to użyje współczynnik skali głównym ekranie urządzenia:

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

Co zrobić, jeśli obraz nie ma rozmiaru okna? Niż co zastąpić imgForeground.window.screen.scale –

+0

Cześć! Cóż, trzeci parametr to skala, a nie jakikolwiek wymiar (tj. Rozmiar)! Dla wszystkich iPhonów, iPodów itp., Które NIE mają ekranów siatkówki, zwrócą 1,0f, podczas gdy urządzenia wyświetlające Retina będą zapewniały 2.0f. –

+1

zamień "imgForeground.window.screen.scale" na "[[UIScreen mainScreen] scale]", więc staje się bardziej jasne, że chodzi o skalę "ekranu"! –