2012-07-15 34 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,因此图像将不会像素化。