UIImage — изображение, загруженное из AppBundle, сохраняется с более низким разрешением в каталоге приложений.

Итак, у меня есть UIImage, который я загружаю с помощью [UIImage imageNamed]. Затем я сохраняю этот файл в каталоге документов. Моя проблема в том, что файл изначально имел разрешение 240. Когда я получаю файл из каталога документов Simulator, он теперь имеет разрешение 72. Как я могу сохранить его в том же разрешении, в котором он был загружен?

Вот как я его загружаю:

UIImage * image = [UIImage imageNamed:@"halloween_big.jpg"]
CGContextRef context = CGBitmapContextCreate(
                                                     (void*) pixels,
                                                     image.size.width,
                                                     image.size.height,
                                                     8,
                                                     image.size.width * 4,
                                                     CGImageGetColorSpace(image.CGImage),
                                                     kCGImageAlphaPremultipliedLast
                                                     );

//  get the image from the current context with our new pixels
CGImageRef imageRef = CGBitmapContextCreateImage( context );

image = [UIImage imageWithCGImage:imageRef];

РЕДАКТИРОВАТЬ. Я также пытался загрузить изображение только этим и не вносил изменений в изображение:

 UIImage *loaded = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"halloween_big" ofType:@"jpg"]];  

Вот как я его сохраняю:

NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.jpg"];
[UIImageJPEGRepresentation(image, 1.0) writeToFile:jpgPath atomically:YES];

РЕДАКТИРОВАТЬ. Я получаю ту же потерю разрешения, если сохраняю файл в формате PNG.

Чтобы быть уверенным, то же самое произойдет, если я изменю параметр качества на UIImageJPEGRepresentation.


person Brian    schedule 07.11.2011    source источник
comment
Я получил те же результаты, если сохранил изображение сразу после его загрузки, не имея дело с графическим контекстом.   -  person Brian    schedule 07.11.2011
comment
Это может быть решением. Посмотрите здесь: stackoverflow.com/questions/990550/   -  person UPT    schedule 07.11.2011
comment
Можете ли вы уточнить - я не пытаюсь изменить размер изображения, я просто хочу, чтобы сохраненное изображение было того же разрешения, что и изображение, которое я первоначально открыл.   -  person Brian    schedule 07.11.2011


Ответы (1)


Скорее всего, iPhone загружает изображение с разрешением, оптимизированным для вашего симулятора.

Вы тестируете версию симулятора без дисплея Retina?

Также:

Какое разрешение dpi используется для приложения iPhone?

person Michael Dautermann    schedule 07.11.2011
comment
Я пробовал с Retina и без в iPhone Simulator. Я также проследил это до того, как сделал что-либо с изображением. Как только он загружается как UIImage, я записываю его на диск, и его разрешение равно 72. Я пытался загрузить UIImage как с imageNamed, так и с initWithContentsOfFile. - person Brian; 07.11.2011
comment
вы видите разные результаты на реальном устройстве? - person Michael Dautermann; 07.11.2011
comment
Я еще не пробовал это на устройстве. Я думаю, это возможно. Я все еще нахожусь на ранней стадии разработки, пытаясь сделать прототип. - person Brian; 07.11.2011