Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
noname_club
104 / 95 / 12
Регистрация: 01.05.2013
Сообщений: 600
#1

Картинки в NORETINA устройствах - Objective-C

04.08.2013, 11:19. Просмотров 634. Ответов 0
Метки нет (Все метки)

Думаю некоторые сталкивались с тем что обычные устройства не умеют правильно интерполировать(сгладить) изображение, если они превышает размеры своего контейнера.

Если на retina с этим делом все "хорошо".

То на обычном iphone можно увидеть вот такую картинку

Картинки в NORETINA устройствах
верхнее изображение без обработки.
для нижнего применено программное сглаживание

Результат очевиден: картинка со сглаживаем выглядит лучше.

Осталось выяснить как это "сглаживание" делается

объявим две глобальные фукнции:

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// private functions
 
// use frameworks:
// #import <QuartzCore/QuartzCore.h>
 
UIImage* sys_objAntiAlias(UIImage*img, CGSize size) {
    
    UIGraphicsBeginImageContext(size);
    [img drawInRect:CGRectMake( 0 , 0  , size.width , size.height ) ];
    CGContextSetInterpolationQuality( UIGraphicsGetCurrentContext() , kCGInterpolationHigh );
    
    img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return img;
}
 
void sys_objAntiAliasAfter(id obj) {
 
    [obj layer].shouldRasterize = NO;
    [obj layer].rasterizationScale = 1;
    [obj layer].edgeAntialiasingMask = -1;
    [obj setClipsToBounds:YES];
    [obj layer].masksToBounds = YES;
}
использование

Objective-C
1
2
3
4
5
6
7
8
9
// autolayuot отключен!
-(void)viewWillAppear:(BOOL)animated {
    
    UIImage *newimage = sys_objAntiAlias(_myimg2.image, _myimg2.frame.size);
    
    _myimg2.image = newimage;
    
    sys_objAntiAliasAfter(_myimg2);
}
так как retina устройства не требуют данной обработки изображений, то объявим макрос retina детектора

Objective-C
1
#define isRetina ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] > 1.1f)
и будем проверять, и в случае отсутствия retina экрана на устройстве, будем применять сглаживания

Objective-C
1
2
3
4
5
6
7
8
9
-(void)viewWillAppear:(BOOL)animated {
    if (!isRetina) {
        UIImage *newimage = sys_objAntiAlias(_myimg2.image, _myimg2.frame.size);
        
        _myimg2.image = newimage;
        
        sys_objAntiAliasAfter(_myimg2);
    }
}

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

http://www.cyberforum.ru/ios-dev/thread948132.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 11:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Картинки в NORETINA устройствах (Objective-C):

Отображение RTSP потока видео на iOS устройствах
Доброго времени суток. Мне требуется отобразить на экране телефона видео,...

Маштабирование картинки на разных Android-устройствах
Доброе утро, друзья! Подскажите, пожалуйста, такую вещь. Делаю приложение,...

Двигатели в устройствах
Доброго времени суток форумчане ! Интересует такая информация, какие...

Информация о системе и устройствах
С помощью каких библиотек можно вывести информацию о системе и устройствах?...

Выгорают порты на устройствах
Приветствую уважаемые, подскажите пожалуйста почему между офисами сгорают порты...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 11:19
Привет! Вот еще темы с решениями:

Информация о ситовых устройствах
Привет! Делаю программу &quot;Информация о ситовых устройствах&quot; в делфи7....

Шрифт на мобильных устройствах
Весь контент написан шрифтом Comic Sans MS. С ПК заходишь на сайт начертание...

Маштабирование на мобильных устройствах
Помогите,пожалуйста.

glut на других устройствах
Заранее пребольшущее извинение, если такая тема есть. 10 минут искал -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru