2013-08-03 16 views
11

obecnie używam UIGraphicsGetImageFromCurrentImageContext() zapisać obraz zawartości do rolki aparatu użytkownika, ale jakość obrazu jest gorsza niż gdybym zrobić zrzut ekranu w symulatorze. Czy jest jakiś sposób, aby to poprawić? A w jakim formacie jest zapisany obraz? Bmp? Czy istnieje sposób na zmianę tego?Lepsza jakość obrazu z UIGraphicsGetImageFromCurrentImageContext()

Oto mój zapisać kod:

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

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

jak duży jest Twój "' size'"? jeśli nie jest tak duża, to twoja rozdzielczość będzie dość słaba. –

+0

Ma mniej więcej taki sam rozmiar ekranu. Nie oglądam zapisanego obrazu w innym miejscu. Zapisałem go na symulatorze i poszłam do rolki kamery symulatora i wygląda to o wiele gorzej niż w aplikacji. –

Odpowiedz

36

Zamiast UIGraphicsBeginImageContext należy używać:

UIGraphicsBeginImageContextWithOptions(size, NO, 0); 
+0

To działa! A co z typem pliku zapisu? –

+0

Uważam, że zapisuje jako jpg. – Wain

+0

To powoduje, że obraz jest renderowany z prawidłowym kontrastem. Domyślną wartością jest 0 (jest to "skala [UIScreen mainscreen]"). Aby zapisać jako JPG lub PNG, użyj UIImageJPGRepresentation lub UimagePNGRepresentation na wynikowym obrazie. –

0

Jeśli jesteś na siatkówce wyświetlić wielkość kontekście jest tylko o połowę mniejszy od „prawdziwego” obrazu.

Spróbuj podwoić rozmiar (lub, aby być poprawnym, użyj contentScaleFactor widoku).

+0

Tak, to wydaje się być problemem. Jak używać contentScaleFactor do skalowania obrazu wyjściowego? –

+0

Podobnie jak: size.width * = [[warstwa treści] contentsScale]; size.height ... – Tom

Powiązane problemy