在iPad上强制加载x2版本图像时的模糊图像

时间:2012-01-27 14:39:13

标签: iphone ios ipad uiimage scaling

我正在尝试手动强制iOS加载2x版本的文件图像文件。我这样做是为了节省资源 - 我需要iPhone版本的图形,我想以1:1的比例使用iPad版本。

要做到这一点,我不能使用initWithContentsOfFile,因为即使我在文件名中添加x2,iOS也会提供x1版本。相反,我使用此代码:

NSString *filename = [myImage filenameWithSuffix:@"@2x"];
UIImage *image = [[UIImage alloc] initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:filename]] CGImage]
                                            scale:1.0
                                      orientation:UIImageOrientationUp];

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

有效。我100%肯定它正在拿起x2版本(我改变了图形以确保)。

然而,当它显示在屏幕上时,如果尺寸正确,则模糊不清。事实上,它看起来像x1版本高达200%,因此iOS对我的形象做了一些奇怪的事情。

我确保在像素边界上绘制图像。

更新:

即使我创建了另一个没有x2后缀的图像文件并使用initWithContentsOfFile加载它,它仍然模糊不清。所以这与它的加载方式无关。

除像素不对中外,什么会导致图像质量下降?

请注意,我已经截取屏幕截图并将图像与Photoshop中的原始图像进行比较。它的大小完全相同,因此缩放不是问题。

2 个答案:

答案 0 :(得分:1)

这只是在黑暗中拍摄,但尝试将init方法的比例更改为2。

NSString *filename = [myImage filenameWithSuffix:@"@2x"];
UIImage *image = [[UIImage alloc] initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:filename]] CGImage]
                                            scale:2.0
                                      orientation:UIImageOrientationUp];

UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

我可以使用以下功能在iPad上加载@ 2x图像:

UIImage *image = [UIImage imageNamed:@"fileName@2x"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[imageView sizeToFit];
[self.view addSubview:imageView];

(因为我使用imageNamed,图像是.png,我没有将.png附加到文件名,因为它是由方法假设的)

答案 1 :(得分:1)

我已经解决了这个问题,我很尴尬地说它是由于像素对齐造成的。

我发现iOS模拟器可以突出显示未对齐的图像,这证明图像确实未对齐。然后,我从图像向上记录每个视图的位置,以便找到导致问题的那个视图。这个片段多次证明了它的重量:

    NSLog(@"View details");
    UIView *view = theImageView;
    while (view)
    {
        NSLog(@"%@", view);
        view = [view superview];
    }