Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
#1

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

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

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

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

Двигатели в устройствах - Электроника
Доброго времени суток форумчане ! Интересует такая информация, какие двигатели в основном используют в лазерных принтерах, в частности...

Не создается БД на некоторых устройствах - Программирование Android
Работает на реальном лоллипопе и на genymotion 4.1.1, не работает на стандартном эмуле 4.4.2 и на реальном 4.1.2. Пишет no such table:...

Информация о ситовых устройствах - Delphi
Привет! Делаю программу &quot;Информация о ситовых устройствах&quot; в делфи7. Программа выдает ошибку не могу разобраться в чем проблема. кто...

Hover на touch устройствах - HTML, CSS
Как сделать, чтобы Hover эффект отображался на устройствах с touch. Спрашиваю людей, которые реально знают.(Писать, типа: на touch нет...

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

Парсинг информации об устройствах - Wi-Fi
Есть ли возможность получать с роутера dlink dir-628 информацию о подключениях : mac адрес, имя устройства, время открытия и время закрытия...

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

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

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

SNTP сервер на CAP-устройствах - Mikrotik
Добрый день. Есть микротик, в которых заходит интернет. с локальным адресом 192.168.1.1/24. Он же является CAPsMAN менеджером. Есть...

Видеокарта GT 730 не найдена в устройствах - Видеокарты
Форумчане! Ситуация такая: Играл за компьютером, отошел по делам, прихожу изображения на экране нет, но кулеры работают и питание есть....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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