绘制视网膜与非视网膜图像

时间:2013-04-04 13:47:48

标签: ios

UIImage 1:使用大小为400x400的@ 2x修饰符从文件加载,因此UIImage 1将其大小报告为200x200

UIImage 2:从文件加载大小为400x400的@ 2x修饰符加载,因此UIImage 2将其大小报告为400x400

然后我从上面创建2张图片,将下面的代码应用到每个

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

考虑到上述情况,我可以预期两个结果图像的图像质量完全相同吗? (我试图确定将200x200视网膜图像绘制到400x400非视网膜上下文会降低质量,而不是绘制未加载视网膜图像的相同图像)

2 个答案:

答案 0 :(得分: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)

图像总是400 * 400像素:不同之处在于视网膜显示400 * 400像素占用的空间更少,即正好是一半(200 * 200核心图形点)。如果您没有对图像应用任何变换将保持完全相同。

您编写的代码会按原样渲染图像,因为您要覆盖设备比例因子并将其设置为始终为1(1像素到1磅)。 如果您希望图像在视网膜和非视网膜设备上覆盖相同数量的屏幕,则应使用两个图像,一个大两倍。