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非视网膜上下文会降低质量,而不是绘制未加载视网膜图像的相同图像)
答案 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磅)。 如果您希望图像在视网膜和非视网膜设备上覆盖相同数量的屏幕,则应使用两个图像,一个大两倍。