0

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

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

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

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

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

4

2 回答 2

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 语句应该可以为您解决问题。

永远不要对尺寸/尺寸/位置等进行硬编码。您应该始终通过询问图像的大小来动态提取该信息。然后,您可以更改图像的大小,而不必担心必须在应用程序中找到硬编码的大小。

于 2013-04-04T13:56:47.323 回答
1

图像始终为 400*400 像素:不同之处在于,在视网膜显示器中,400*400 像素覆盖的空间更少,正好是一半(200*200 核心图形点)。如果您不对图像应用任何转换,则将保持完全相同。

您编写的代码按原样呈现图像,因为您正在覆盖设备比例因子并将其设置为始终 1(1 像素到 1 点)。如果您希望图像在 Retina 和非 Retina 设备上覆盖相同数量的屏幕,您应该使用两张图像,一张大两倍。

于 2013-04-04T13:57:03.323 回答