2014-02-19 5 views
1

У меня есть некоторые вопросы относительно сетчатки и изображений не-сетчатки в iOS. На самом деле я загружаю некоторые файлы изображений, и они не добавляются с суффиксом @ 2x. У меня мало вопросов.Retina vs Non-Retina iOS

1 - Во-первых, он не находится в комплекте только в библиотеке документов после загрузки, поэтому @ 2x не будет работать, как работа для изображений сетчатки, которые в комплекте. Правильно ли мое предположение?

2 - Retina находится в двойном размере по сравнению с изображениями, не относящимися к сетчатке, но если вы увидите, что изображения сетчатки масштабируются на 2,0, то, если бы я вручную масштабировал любое изображение до 2,0, была ли разница в качестве? например У меня есть изображение Image1.png и конвертируйте его в шкалу 2.0 и просто добавляйте в UIImageView, а с другой стороны - к тому же изображению, но с именем [email protected], и я добавляю Image2 в UIImageView. Любая разница в качестве будет в Image1 по сравнению с Image2?

Вот фрагмент кода, который я использую для преобразования его в шкале 2.0 или сетчатке, если изображения не являются сетчаткой.

UIImage *image = [UIImage imageNamed:@"fileName"]; 

UIImage *convertedImage = [UIImage imageWithData:UIImagePNGRepresentation(image) scale:2.]; 

ответ

0

загружено изображение, размещенное на библиотеке документов. вы не можете получить изображение, используя [UIImage imageNamed:@"filename"], потому что эти функции получают только изображение из комплекта. вот пример того, как получить изображение из библиотеки документов:

NSString *bundlePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", bundlePath, fileName]]; 

масштабирования без сетчатки изображения, чтобы получить размер сетчатки плохой практика. Мое предложение - ваше загруженное изображение должно быть в размере сетчатки. из него, сгенерируйте изображение без сетчатки и сохраните его в библиотеке документов.

Это пример того, как масштабировать изображение сетчатки и сохранять ее в библиотеке документов. чтобы получить размер не сетчатки, вы можете масштабировать его вручную, а затем сохранить его. здесь пример кода:

UIImage *image = [UIImage imageNamed:@"[email protected]"]; 

// set non-retina size from current image 
CGSize size = CGSizeMake(image.size.width/2., image.size.height/2.); 


/** scale the image */ 

UIGraphicsBeginImageContext(size); 

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(context, 0.0, size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), image.CGImage); 

UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 


/** save scaled image */ 

NSString *basePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
// save with same name but without suffix "@2x" 
NSString *filePath = [NSString stringWithFormat:@"%@/%@", basePath, @"nonRetinaImage"]; 

@try { 
    [UIImagePNGRepresentation(scaledImage) writeToFile:filePath options:NSAtomicWrite error:nil]; 
} @catch (NSException *exception) { 
    NSLog(@"error while saving non-retina image with exception %@", exception); 
} 
+0

спасибо Noval, но если вы собираетесь масштабировать сетчатку в не сетчатку, тогда вы не получите качество, как показано на изображениях сетчатки. Как 100X100 отображается в сетчатке как 50X50. Я предполагаю, что это не уменьшено, это какая-то техника сжатия? То, что делает вышеприведенный код, - это уменьшить его, и я думаю, что это снизит качество. –

+0

в коде, который я излагаю выше. Я получаю изображение с именем 'yourRetinaImage @ 2x.png'. Я изменяю размер изображения до половины и сохраняю с другим именем 'nonRetinaImage' – nvl

Смежные вопросы