Проблема масштабирования при сохранении UIImage как NSData - PullRequest
1 голос
/ 16 декабря 2011

Я хотел бы сохранить изображение в виде nsdata в plist и получить его позже. Но у меня проблема.

Проблема в том, что если UIImage со шкалой 2.0, когда я снова загружаю его позже с

[UIImage imageWithData:]

изображение показывает 2x размер

То, что я хочу, это нравится поведение

[UIImage imageNamed:]

, который будет загружаться в соответствии с масштабом экрана.

Как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 29 февраля 2012

Я наконец-то решил это с помощью этого кода:

UIImage *image = [UIImage imageWithData:imageData];
if (isRetinaDisplay)  {
    image = [UIImage imageWithCGImage:[image CGImage] scale:2.0f orientation:UIImageOrientationUp];
}
2 голосов
/ 13 мая 2014

Вы можете принять во внимание вероятность того, что экран Retina выглядит так:

CGFloat screenScale = [UIScreen mainScreen].scale;
UIImage *image = [UIImage imageWithData:data scale:screenScale];

Этот код охватывает оба случая (Retina / non-Retina) в одну строку.

1 голос
/ 02 декабря 2013

Начиная с iOS 6 вы также можете использовать

+ (UIImage *)imageWithData:(NSData *)data scale:(CGFloat)scale NS_AVAILABLE_IOS(6_0);
0 голосов
/ 16 декабря 2011

Свойство scale доступно только для чтения, но вы можете создать подкласс UIImageView, чтобы сделать его доступным для записи (или сделать его автоматическим в зависимости от того, на каком устройстве он запущен).

// ImageView.h
@interface ImageView : UIImageView

// ImageView.m

CGFloat scaleProperty = 1.0;
@implementation ImageView
- (void)setScale:(CGFloat)scale
{
    scaleProperty = scale;
}

- (CGFloat)scale
{
    return scaleProperty;
}
@end
...