2013-08-03 5 views
11

ich zur Zeit mit UIGraphicsGetImageFromCurrentImageContext() Inhalt einer Bild eines Benutzers Kamerarolle zu retten, aber die Bildqualität ist schlechter, als wenn ich einen Screenshot im Simulator tun. Gibt es eine Möglichkeit, es zu verbessern? Und welches Format hat das gespeicherte Bild überhaupt? Bmp? Gibt es eine Möglichkeit, dies zu ändern?Bessere Bildqualität von UIGraphicsGetImageFromCurrentImageContext()

Hier ist mein speichern Code:

CGSize size = [content bounds].size; 
UIGraphicsBeginImageContext(size); 
[[content layer] renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *originalImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); 
+0

wie groß ist Ihr "' size'"? Wenn es nicht wirklich so groß ist, wird deine Auflösung ziemlich schlecht sein. –

+0

Es ist ungefähr die gleiche Größe des Bildschirms. Ich sehe das gespeicherte Bild nicht an anderer Stelle. Ich speicherte es auf dem Simulator und ging zur Kamerarolle des Simulators und es sieht viel schlechter aus als in der App. –

Antwort

36

Statt UIGraphicsBeginImageContext der Verwendung sollten Sie verwenden:

UIGraphicsBeginImageContextWithOptions(size, NO, 0); 
+0

Es funktioniert! Wie steht es mit dem Dateityp speichern? –

+0

Ich glaube, es spart als jpg. – Wain

+0

Dadurch wird das Bild nur mit der richtigen Streuung gerendert. Die 0 ist der Standardwert (entspricht der [UIScreen-Hauptbildschirm] -Skala). Um als JPG oder PNG zu speichern, verwenden Sie UIImageJPGRepresentation oder UimagePNGRepresentation für das resultierende Bild. –

0

Wenn Sie auf Netzhaut die Größe des Kontext angezeigt werden nur halb so groß wie der „echte“ Bild ist.

Versuchen Sie, die Größe zu verdoppeln (oder verwenden Sie den contentScaleFactor der Ansicht korrekt).

+0

Ja, das scheint das Problem zu sein. Wie verwende ich den contentScaleFactor, um das Ausgabebild zu vergrößern? –

+0

Einfach so: size.width * = [[content layer] contentsScale]; size.height ... – Tom

Verwandte Themen