2012-09-14 6 views
16

Ich versuche, Bild mit UIImage 's drawInRect: Methode zu zeichnen. Hier ist der Code:UIImage drawInrect: glättet Bild

UIImage *image = [UIImage imageNamed:@"OrangeBadge.png"]; 

UIGraphicsBeginImageContext(image.size); 

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)]; 

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Das Problem ist, dass das resultierende Bild verschwommen ist. Hier ist das resultierende Bild (auf der rechten Seite) im Vergleich zu dem Quellbild (auf der linken Seite):

Source image and blurred image

Ich habe versucht beide CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), NO)CGContextSetShouldAntialias(UIGraphicsGetCurrentContext(), NO) aber dies nicht das Problem lösen.

Irgendwelche Ideen?

Vielen Dank im Voraus.

Antwort

29

Wenn Sie auf einem Retina-Gerät entwickeln, hängt das Problem möglicherweise mit der Auflösung Ihres Grafikkontextes zusammen. Würden Sie versuchen mit:

UIGraphicsBeginImageContextWithOptions(size, NO, 2.0f); 

Dies wird Retina-Auflösung aktivieren. Außerdem sollte Ihr Bild mit @ 2x Auflösung verfügbar sein, damit dies funktioniert.

Wenn Sie Nicht-Retina-Geräte als auch unterstützen möchten, können Sie:

if ([UIScreen instancesRespondToSelector:@selector(scale)]) { 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0f); 
} else { 
    UIGraphicsBeginImageContext(newSize); 
} 
+2

Ich würde nicht empfehlen float Gleichheit Überprüfung mit '=='. Alles, was Sie tun müssen, ist die Skalierung auf "0.f", und der Rahmen kümmert sich um den Rest. (siehe http://stackoverflow.com/questions/2765537/how-doi-i-use-the-nsstring-draw-functionality-to-create-a-uiimage-from-text) – Mazyod

+1

Vielen Dank! Dies löst das Problem. 'if ([UIScreen instancesRespondToSelector: @selector (scale)])' - Wird diese Zeile für iOS3 unterstützt? 'scale' Eigenschaft wird ab iOS 4.0 unterstützt. – tonytony

+0

@Mazyod Bin ich richtig zu verstehen, dass '0.0f' wird das Framework behandeln die richtige Skala, unabhängig davon, ob das ist Retina oder nicht-Retina auf dem richtigen Gerät? – Timo