2010-06-29 5 views
6

Posiadam kod generujący obraz, który używa UIGraphicsBeginImageContext(), UIGraphicsGetImageFromCurrentImageContext() i UIImagePNGRepresentation() do wykonania rysunku, a następnie zapisuje go na dysku jako PNG do późniejszego wykorzystania .UIImagePNGRepresentation() i skala (ekran iPhone 4)

Czy UIImagePNGRepresentation() uwzględnia skalę? W jaki sposób, jeśli mam obraz o szerokości 20 punktów, czy wynikowy PNG będzie miał 20 pikseli lub 40 pikseli?

Ponadto podczas wyświetlania tych obrazów używam [UIImage imageWithContentsOfFile:] i [image drawInRect:]. Czy istnieje sposób na wskazanie tych metod, aby użyć rysunków o wyższej rozdzielczości?

Odpowiedz

6

Per na iPhone Application Programming Guide należy użyć UIGraphicsBeginImageContextWithOptions w skali od 2,0 do stworzenia odpowiednio przeskalowany kontekst dla iPhone 4.

Co do drugiej części pytania, uważam, należy zapisać wynikowy png z @ 2x sufiks w nazwie bazy (np. [email protected]). Następnie, po załadowaniu go za pomocą UIImage, jego rozmiar i skala zostaną poprawnie ustawione. W przeciwnym razie obraz zostanie załadowany w skali 1.0 i będzie dwa razy większy (w punktach), jak tego oczekujesz. This section tego samego dokumentu zawiera szczegółowe informacje dotyczące obrazów o wysokiej rozdzielczości dla urządzeń z wyświetlaczami o wysokiej rozdzielczości.

+0

Jeśli stworzyłem kontekst w skali 2.0 (powiedzmy, że ma on 20 punktów szerokości), to kiedy wywołasz UIImagePNGRepresentation(), wynikowy PNG będzie miał 40 pikseli szerokości? –

+0

Według mojego zrozumienia dokumentów, tak. Chociaż przyznaję, że sam tego nie próbowałem. Tworzysz zatem kontekst 20x20 pkt przy współczynniku skali 2,0. Otrzymujesz obraz o wymiarach 40x40 pikseli. Zapisujesz to jako [email protected] Następnie, gdy załadujesz go z UIImage, znowu będzie 20x20 pt ze skalą 2.0. Jeśli zamiast tego zapiszesz go jako image.png i załadujesz go, otrzymasz obraz 40x40 pt ze skalą 1.0. –

+0

Dzięki za pomoc. Mam to działa :) –