我需要从网上获取一些图片。只使用网址中的数据 它们需要在Retina显示屏上正确显示 当我从网络上获取图像时,它们仍然看起来像素化。我需要将图像的比例设置为视网膜显示(2.0),但我必须遗漏一些东西。 这是我到目前为止所做的。
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];
答案 0 :(得分:7)
尝试在网址末尾添加#@2x.png
。这不会改变URL,但图像将被识别为视网膜@ 2x图像。它适用于我,但我使用此方法SDWebImage。
e.g。使用http://www.msdomains.com/tmp/test.png#@2x.png
。
答案 1 :(得分:3)
您的代码应该按原样运行。我不知道你的图像的原始尺寸是什么,但我猜它们是64x64像素。为了正确缩小尺寸,原始图像需要为128x128像素。
作为测试,以下代码在模拟器和我的iPhone 4上正确显示了Retina分辨率的照片:
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:
的调用将返回不透明的数据blob,没有跟踪文件名留下。这是不透明的数据,然后传递给imageWithData:
加载图像。)
答案 2 :(得分:0)
当您直接将图像URL分配给imageView时,它不会将其视为视网膜。
imageView.imageURL = [NSURL URLWithString:@"http://example.com/image.png"];
不会给你一个视网膜图像。
所以,尽管您的图像是200x200,但如果您的imageView是100x100,那么从下载的图像中获取100x100并在视网膜设备上显示像素化图像。
解决方案是使用imageView的image属性而不是imageURL。
imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/image.png"]]];
这会将200x200图像分配给100x100的imageView,因此图像不会像素化。
答案 3 :(得分:-1)
对于视网膜显示,添加相同的图像,其分辨率恰好是原始图像的两倍。别忘了在这个图片名称的末尾添加" @ 2x"例如"image_header.png"
是320x100的图像,然后操作系统会自动为视网膜显示选择另一个名称为"image_header@2x.png"
(尺寸为640x200)的图像...
希望它有所帮助