2012-07-08 11 views
8

Potrzebuję metody do zmiany rozmiaru UIImage podobnie jak w Photoshopie z resamplingiem "najbliższego sąsiada". Szukałem czegoś, ale wszystko, co znalazłem, dotyczyło głośników CoreGraphics, aby poprawić jakość ponownego ładowania. Mam w swojej aplikacji pikselowy styl i wiele rzeczy tworzę przez piksel, a następnie powiększam go o mnożnik x5 (i zajmuje dużo czasu, więc nawet blisko pisania skryptu do Photoshopa). Na przykład:Zmiana rozmiaru UII z twardymi krawędziami

enter image description here>enter image description here

Ale ja naprawdę nie potrzebują tego jak wynik resampling:

enter image description here

Może ktoś wskaże mi właściwą drogę.

+0

Jako dodatek, mogę powiedzieć, że znalazłem dobry sposób na przetwarzanie obrazu wsadowego z "działaniami" programu Photoshop. Ale wciąż potrzebuję odpowiedzi, aby zmniejszyć rozmiar przechowywanych obrazów zasobów. – kokoko

Odpowiedz

16

Kiedy zwrócić obraz w kontekście graficznym, można ustawić kontekście graficznej jakość interpolacji na „None”, tak (np w widoku za drawRect metody):

CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextSetInterpolationQuality(c, kCGInterpolationNone); 
UIImage *image = [UIImage imageNamed:@"pixels.png"]; 
[image drawInRect:self.bounds]; 

Jeśli potrzebujesz wynik jako UIImage (np. aby przypisać go do wbudowanego kontrolera interfejsu użytkownika), możesz to zrobić za pomocą UIGraphicsBeginImageContext (znajdziesz wiele przykładów).

Alternatywą byłoby ustawić właściwość warstwy widoku obrazka magnificationFilter:

pixelatedImageView.layer.magnificationFilter = kCAFilterNearest; 

Prawdopodobnie jest szybsze i bardziej wydajne pamięci, ponieważ nie trzeba przerysować obraz.

+0

Ta odpowiedź wygląda dobrze, muszę ją szybko sprawdzić w XCode, aby ją zaakceptować. Dzięki. – kokoko