Размытое изображение при принудительной загрузке x2-версии изображения на iPad - PullRequest
2 голосов
/ 27 января 2012

Я пытаюсь вручную заставить iOS загрузить 2x версию файла образа файла. Я делаю это для экономии ресурсов - мне нужна эта графика для версии для iPhone, и я хочу использовать ее в масштабе 1: 1 для версии для iPad.

Для этого я не могу использовать initWithContentsOfFile, потому что iOS дает мне версию x1, даже если я добавляю x2 к имени файла. Вместо этого я использую этот код:

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 делает что-то странное с моим образом.

Я убедился, что изображения отрисовываются на границах пикселей.

UPDATE:

Даже если я создаю другой файл изображения без суффикса x2 и использую initWithContentsOfFile для его загрузки, он все еще размыт. Так что это никак не связано с тем, как он загружается.

Что может привести к ухудшению изображения, кроме смещения пикселей?

Обратите внимание, что я сделал скриншот и сравнил изображение с оригиналом в Photoshop. Это точно такой же размер, поэтому масштабирование не проблема.

Ответы [ 2 ]

1 голос
/ 30 января 2012

Я решил эту проблему, и мне стыдно сказать, что это было связано с выравниванием пикселей.

Я обнаружил, что симулятор iOS может выделять смещенные изображения, и это доказывает, что изображения действительно смещены. Затем я записал положение каждого вида от изображения вверх, чтобы найти тот, который вызывал проблему. Этот фрагмент доказал свой вес в золоте несколько раз:

    NSLog(@"View details");
    UIView *view = theImageView;
    while (view)
    {
        NSLog(@"%@", view);
        view = [view superview];
    }
1 голос
/ 27 января 2012

Это всего лишь снимок в темноте, но попробуйте изменить масштаб метода 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];

Я смог отлично загрузить изображение @ 2x на iPadиспользуя это:

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

(Так как я использовал imageNamed, а изображение было .png, я не добавил .png к имени файла, потому что это предполагается методом)

...