2013-04-04 94 views
0

的UIImage 1:从与尺寸400×400,因而UIImage的1 @ 2×改性剂文件加载为200x200的绘图视网膜与非视网膜图像

的UIImage 2将报告它的大小:从文件加载而不的@与尺寸400×400,因而UIImage的2 2倍改性剂将报告其大小为400×400

我然后创建上面施加下面的代码给每个

UIGraphicsBeginImageContextWithOptions(CGSizeMake(400,400), YES, 1.0); 
[image drawInRect:CGRectMake(0, 0, 400, 400)]; 
UIImage *rescaledI = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

考虑到上述从2个图像,吾人可以期望图像QUAL两个产生的图像是完全一样的吗? (我试图确定是否将200x200视网膜图像绘制到400x400非视网膜环境会降低质量,而绘制相同的图像不会作为视网膜图像加载)

回答

1

只返回当前图像的大小。

UIImage *image1 = [UIImage imagedNamed:@"myimage.png"]; 
    //access width and height like this 
    image1.size.width; 
    image1.size.height; 

UIGraphicsBeginImageContextWithOptions(CGSizeMake(image1.size.width, image1.size.height), YES, 1.0); 
[image drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)]; 
UIImage *rescaledI = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

当然,如果你要与任何图像,你正试图获得的尺寸更换image1的。一些switch语句或者if语句应该为你做诡计。

决不硬编码的大小/尺寸/位置等等。你应该总是扯这些信息动态地问你的图像大小。然后,您可以更改图像的大小,而无需担心在应用程序中定位硬编码大小。

+1

+1从来没有硬编码大小/尺寸 – BloonsTowerDefence 2013-04-04 14:02:47

+0

我的问题无关,与访问宽度和高度。它与低层次系统如何处理具有不同比例因子的UIImage的绘制有关。 – RunLoop 2013-04-04 14:12:26

1

的图像总是400个* 400像素:不同的是,在视网膜显示400×400像素覆盖更小的空间,也就是正好一半(200个* 200核心图形点)。如果您没有对图像应用任何转换,将保持完全一样。

你写的代码呈现的图像作为是因为你重写装置比例因子和将其设置为始终为1(1个像素1点)。 如果您希望图像在视网膜和非视网膜设备上覆盖相同数量的屏幕,则应使用两倍大的图像。

+0

我写的代码不会使它在视网膜显示上大一倍,因为我将比例设置为1.0。 – RunLoop 2013-04-04 14:10:24

+0

你是对的,我编辑了我的答案。 – HermioneGreen 2013-04-04 14:37:54

相关问题