2012-07-15 36 views
6

圖像我有一些圖片,我需要從網上獲得。只需使用來自網址的數據。
他們需要在Retina顯示屏上正確顯示。
當我從網上的圖片,他們仍然看起來是像素化。我需要將圖像的縮放比例設置爲視網膜顯示(2.0),但我必須缺少一些東西。 這是我到目前爲止所做的。Retina顯示屏從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]; 

回答

3

你的代碼應工作幾乎原樣。我不知道你的圖像的原始尺寸是什麼,但我猜他們是64x64像素。爲了正確縮放,原始圖像需要爲128x128像素。

作爲測試,下面的代碼正確顯示我的視網膜分辨率的照片上的模擬器,並在我的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]; 

注意,UIImageView是375x249.5點,這是半原始(像素)尺寸的照片。另外,設置contentScaleFactor似乎沒有必要。

(順便說一句,我不能看到,在URL中指定@2x會有幫助,在這種情況下,調用dataWithContentsOfURL:將返回數據的不透明斑點,沒有文件名左邊的痕跡。這是不透明的數據,然後傳遞到imageWithData:加載圖像。)

7

嘗試在URL的末尾添加#@2x.png。這不會改變網址,但圖像將被視爲視網膜@ 2x圖像。它適用於我,但我使用這種方法SDWebImage

例如使用http://www.msdomains.com/tmp/test.png#@2x.png

+0

這是真的嗎? – Ali 2012-11-20 15:22:49

+0

對我不起作用 – 2012-11-23 03:51:48

+0

這是個玩笑嗎? – deadlock 2014-03-01 15:13:22

0

對於視網膜顯示,與恰好是原始圖像的兩倍的分辨率添加相同的圖像。不要忘記在圖像名稱末尾加上「@ 2x」......例如"image_header.png"是一個圖像的320x100然後用名"[email protected]"(640X200尺寸)的另一圖像將被用於視網膜顯示屏會自動由OS選擇... 希望它有助於

+0

你錯過了這一點:你建議對於從主包加載的圖像是正確的,就是這樣。 – Ali 2012-11-20 15:23:57

0

當您直接將圖像URL分配給imageView時,它不會將其作爲視網膜。

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

不會給你一個視網膜圖像。

所以,inspite你的形象是200×200,但如果你的ImageView的是100×100,然後它會從下載的圖像100×100,並顯示在視網膜顯示設備像素圖像。

解決方案是使用的ImageView,而不是IMAGEURL的圖像性能。

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

這會將200x200圖像分配給100x100的imageView,因此圖像將不會像素化。