2012-07-15 17 views
6

Mam kilka zdjęć, które muszę pobrać z internetu. Wystarczy użyć danych z adresu URL.
Muszą być wyświetlane poprawnie na wyświetlaczu Retina.
Gdy otrzymuję obrazy z internetu, nadal wyglądają jak piksele. Muszę ustawić skalę zdjęć na wyświetlaczu Retina (2.0), ale muszę czegoś pomijać. Oto co zrobiłem do tej pory.Wyświetlacz Retina dla obrazu z adresu URL

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:@"http://www.msdomains.com/tmp/test.png"]; 

CGRect labelFrame = CGRectMake(0,0,64,64); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 
imageView.contentScaleFactor = [UIScreen mainScreen].scale; 

[imageView setImage:img]; 
[self addSubview:imageView]; 
[imageView release]; 

Odpowiedz

3

Twój kod powinien działać całkiem dużo jak jest. Nie wiem, jakie były oryginalne wymiary obrazu, ale domyślam się, że miały rozmiar 64 x 64 pikseli. Aby poprawnie skalować, oryginalny obraz musiałby mieć rozmiar 128 x 128 pikseli.

Jako test, poniższy kod prawidłowo wyświetlane moje zdjęcie w rozdzielczości Retina na symulatorze, a na moim iPhone 4:

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.seenobjects.org/images/mediumlarge/2006-08-19-native-lilac.jpg"]]]; 

CGRect labelFrame = CGRectMake(0, 0, 375, 249.5); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 

[imageView setImage:img]; 
[self.view addSubview:imageView]; 

nocie że UIImageView jest 375x249.5 punktów, co stanowi połowę oryginalne (pikselowe) wymiary zdjęcia. Również ustawienie contentScaleFactor nie było konieczne.

(Na marginesie, nie widzę, że podanie adresu URL na adres @2x pomoże w tym przypadku, ponieważ wywołanie dataWithContentsOfURL: spowoduje zwrócenie nieprzejrzystej kropli danych bez pozostawienia śladu po nazwie pliku. nieprzezroczyste dane, które następnie są przesyłane do imageWithData: w celu załadowania obrazu.)

7

Spróbuj dodać #@2x.png na końcu adresu URL. To nie zmieni adresu URL, ale obraz zostanie rozpoznany jako obraz siatkówki @ 2x. Udało się to dla mnie, ale użyłem tej metody z SDWebImage.

np. przy użyciu http://www.msdomains.com/tmp/test.png#@2x.png.

+0

Czy to prawda? – Ali

+0

nie działa dla mnie –

+0

czy to żart? – deadlock

0

W przypadku wyświetlacza Retina należy dodać ten sam obraz z rozdzielczością, która jest dokładnie dwukrotnie większa od oryginalnego obrazu. nie zapomnij dodać "@ 2x" na końcu tej nazwy obrazu ... np. "image_header.png" jest obraz w formacie 320x100 wtedy inny obraz z nazwa "[email protected]" (wymiar 640x200) zostanie wybrany na wyświetlaczu siatkówki automatycznie przez system operacyjny ... nadzieję, że pomoże

+0

Brakuje ci sensu: to, co sugerujesz, jest poprawne dla obrazów załadowanych z głównego pakietu, to wszystko. – Ali

0

Po bezpośrednim przypisaniu adresu URL obrazu do obrazuViewView, nie przyjmuje go jako siatkówki.

imageView.imageURL = [NSURL URLWithString:@"http://example.com/image.png"]; 

nie da obrazu siatkówki.

Podsumowując, obraz ma wymiary 200 x 200 pikseli, ale jeśli obraz będzie miał wymiary 100 x 100, pobierze 100 x 100 z pobranego obrazu i wyświetli piksel na urządzeniach Retina.

Rozwiązaniem byłoby użycie właściwości image of imageView zamiast imageURL.

imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/image.png"]]]; 

Spowoduje to przypisanie obrazu 200x200 do imageView o wartości 100x100, a zatem obraz nie zostanie podzielony na piksele.

Powiązane problemy