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

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

04.08.2013, 11:19. Просмотров 653. Ответов 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);
    }
}

данный код является сырым полуфабрикатом, дальнейшие подробности правильного использования в проектах и другие возможности применения сглаживания будут раскрыты в ходе обсуждения.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.08.2013, 11:19
Ответы с готовыми решениями:

Имитация тАпа на ios устройствах
Здравствуйте уважаемые форумчане! Не нашел ничего толкового по сабжу, поэтому...

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

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

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

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

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

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

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

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


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

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

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