Масштабирование под разные экраны

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Масштабирование под разные экраны

Post by Фант »

Привет! Вот у меня спрайт. Он у меня масштабируется от высоты экрана девайса в ландшафте. Тоесть квадрат .maxy,.maxy. я картинку из этого спрайта сохраняю в файл в расширении .jpg и возвращаю эту картинку обратно в спрайт. Надо ли использовать scale и с каким значением?
Так же хотелось бы понять как правильно масштабировать изображение, если делать скрин экрана командой GRAPHICS SAVE X,Y, W,H TO N$, а затем это изображение отображать в графическом окне или спрайте. Мой планшет ipad 4 изображение отображает в масштабе 1:1 а вот девайсы iphone 6 и 7 изображение растягиваюt в два раза.

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Масштабирование под разные экраны

Post by Mr. Kibernetik »

Файл изображения обладает тремя взаимосвязанными характеристиками: размером в точках (pt), размером в пикселах (px) и масштабом (scale).

px = pt * scale

В smart BASIC

scale = dpi / 72

То есть изображение с dpi 72 будет иметь scale=1, а с dpi 144 будет иметь scale 2.

При сохранении/загрузке изображения smart BASIC считывает из файла px и dpi изображения, и таким образом определяет его scale и pt. Smart BASIC использует точки (pt) для размеров при сохранении/загрузке изображений.

Разные устройства имеют разный dpi экрана, поэтому и разный scale.

ПРИМЕР 1:
Изображение, у которого размер в точках равен 100 pt, на устройстве с dpi=72 при сохранении будет иметь размер 100 px и dpi=72, а на устройстве с ретина дисплеем у которого dpi=144 будет иметь размер 200 px и dpi=144.

ПРИМЕР 2:
При загрузке изображения размером 200 px и dpi=144 на устройство с экраном с dpi=72 smart BASIC определяет его scale:

scale = 144 / 72
scale = 2

и рассчитывает его размер в точках

pt = 200 / 2
pt = 100

Таким образом, изображение, сохраненное на устройстве с одним dpi экрана и потом загруженное на устройстве с другим dpi экрана, будет иметь одинаковый размер в точках на экране pt, потому что smart BASIC учитывает и px изображения, и dpi изображения, и dpi экрана как при сохранении, так и при загрузке изображения.

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Масштабирование под разные экраны

Post by Фант »

Спасибо. Но меня сейчас интересует конкретный случай.
Я использую в программах изображения с разрешением 144. Это очень хорошо подходит для экранов моих девайсов с ретиной и без нее: ipad 4 и ipad mini 1. Для данных устройств изображения масштабировать не надо и в принципе вопрос у меня был не про этот случай.
В настоящий момент мне надо использовать в программе изображение, которое сохраняется из спрайта и после сохранения опять используется в этом же спрайте. Тоесть у меня есть программа, которая масштабируется для всех девайсов путем пересчета коэффициента. Этот коэффициент я расчитываю от известных размеров стандартного ipad и применяю у себя в программе для всех девайсов.
При сохранении изображения из спрайта на двух своих ipad я вижу следующее: ipad 4 сохраняет изображение с dpi 144, а ipad mini с dpi 72. Здесь вроде как все понятно: есть экран с ретина и есть обычный экран и когда я возвращаю эти сохраненные изображения обратно в спрайт-все встает на свои места без масштабирования. Свистопляска начинается в симуляторе xcod. В настоящий момент в симуляторе нет девайсов с экранами с dpi 72. Здесь минимальный ipad 4 и iphone 5. Вот если я пытаюсь в симуляторе ipad4 возвратить сохраненное изображение в спрайт без масштабирования, то это изображение возвращается увеличенным в два раза, а изображения для iphone 6+ Получается увеличенным в три раза! Тоесть на выходе получается не соответствие в масштабе для ipad 4 в реале и в симуляторе.
В симуляторе я обхожу данную проблему следующим образом: если изображение вернуть в спрайт с пересчетом масштаба-все получается идеально: draw image "..." at x,y scale 1/screen_scale(). Вот эта команда в симуляторе рисует изображение так как надо и на ipad4 и на iphone 6+, а в реале эта команда для ipad 4 уменьшает изображение (в точках) в два раза.
Так посоветуйте: что надо мне сделать в реале, чтобы вернуть изображение в спрайт в соотношении с размером этого спрайта в точках??? И чтобы это работало одинаково для всех устройств.
И еще. Команда SCREEN_SCALE () возвращает масштаб экрана. Не-Retina экраны имеют масштаб равный 1. Экраны Retina имеют масштаб равный 2. Это написано в инструкции. А какой масштаб имеют экраны девайсов iphone 6-7? Видимо у них коэффициент 3?

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Масштабирование под разные экраны

Post by Mr. Kibernetik »

Фант wrote:
Sun Jun 11, 2017 2:53 pm
А какой масштаб имеют экраны девайсов iphone 6-7? Видимо у них коэффициент 3?
Запросто. Выполните на этих девайсах функцию SCREEN_SCALE() и увидите какой там коэффициент.

Как быть в каждом конкретном случае - это решать самому программисту.
Я могу только пояснить как считает smart BASIC и на что он обращает внимание при работе с изображениями.

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Масштабирование под разные экраны

Post by Фант »

Mr. Kibernetik wrote:
Sun Jun 11, 2017 3:01 pm
Фант wrote:
Sun Jun 11, 2017 2:53 pm
А какой масштаб имеют экраны девайсов iphone 6-7? Видимо у них коэффициент 3?
Запросто. Выполните на этих девайсах функцию SCREEN_SCALE() и увидите какой там коэффициент.
В том то и дело-нет у меня этих девайсов. Если бы они были-этих вопросов бы у меня не было

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Масштабирование под разные экраны

Post by Фант »

Прошу пользователей оказать помощь! Нужна проверка характеристик экрана разных устройств. (Особенно интересуют iPhone 5,5s,6,6+ и iPad pro,ipad air,ipad mini 2-4
Запустите программку и сделайте скрин экрана.
Так же прошу добавить скрин изображения 1".jpg", который получится после запуска программы.
GRAPHICS
REFRESH OFF
SET TOOLBAR OFF
SET ORIENTATION LANDSCAPE
OPTION TEXT POS CENTRAL
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
SPRITE 1 BEGIN maxx,maxy
GRAPHICS CLEAR 0,0,0
DRAW CIRCLE maxx/2,maxy/2 SIZE maxy/2
DRAW LINE 0,maxy/2 TO maxx,maxy/2
DRAW LINE maxx/2,0 TO maxx/2,maxy
DRAW COLOR 1,1,0
DRAW FONT SIZE 50
DRAW TEXT "dpi="&SCREEN_SCALE ()*72 AT maxx/2,maxy/2
SPRITE END
SPRITE 1 SAVE "1.jpg"
SPRITE 1 BEGIN
GRAPHICS CLEAR
DRAW IMAGE "1.jpg" AT maxx/2,maxy/2
SPRITE END
SPRITE 1 SHOW
PAUSE 5
Attachments
Скрин экрана iPad4
Скрин экрана iPad4
IMG_5565.PNG (178.23 KiB) Viewed 4373 times
Скрин изображения 1.jpg
Скрин изображения 1.jpg
IMG_5564.PNG (225.96 KiB) Viewed 4373 times

DrChip
Posts: 167
Joined: Wed Oct 22, 2014 3:26 pm
My devices: iPhone 4 to 6+,iPad mini to iPad air 2

Re: Масштабирование под разные экраны

Post by DrChip »

GRAPHICS
REFRESH OFF
SET TOOLBAR OFF
SET ORIENTATION LANDSCAPE
OPTION TEXT POS CENTRAL
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
SPRITE 1 BEGIN maxx,maxy
GRAPHICS CLEAR 0,0,0
DRAW CIRCLE maxx/2,maxy/2 SIZE maxy/2
DRAW LINE 0,maxy/2 TO maxx,maxy/2
DRAW LINE maxx/2,0 TO maxx/2,maxy
DRAW COLOR 1,1,0
DRAW FONT SIZE 50
DRAW TEXT "dpi="&SCREEN_SCALE ()*72 AT maxx/2,maxy/2
SPRITE END
SPRITE 1 SAVE "1.jpg"
SPRITE 1 BEGIN
GRAPHICS CLEAR
DRAW IMAGE "1.jpg" AT maxx/2,maxy/2
SPRITE END
SPRITE 1 SHOW
PAUSE 5
Attachments
iPhone 6+, ios 11 beta
iPhone 6+, ios 11 beta
IMG_5239.PNG (224.63 KiB) Viewed 4364 times

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Масштабирование под разные экраны

Post by Фант »

Thank you!

User avatar
Фант
Posts: 1363
Joined: Sat Nov 30, 2013 10:01 am
My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
Location: Россия,Санкт-Петербург
Flag: Russia
Contact:

Re: Масштабирование под разные экраны

Post by Фант »

В реале получается, что девайс сохраняет изображение в масштабе своего экрана и со своим dpi, поэтому при отображении изображения опять в том же спрайте никаких искажений не наблюдается. Получается xcod масштабирует не верно. :cry:

User avatar
Mr. Kibernetik
Site Admin
Posts: 4782
Joined: Mon Nov 19, 2012 10:16 pm
My devices: iPhone, iPad, MacBook
Location: Russia
Flag: Russia

Re: Масштабирование под разные экраны

Post by Mr. Kibernetik »

Фант wrote:
Sun Jun 11, 2017 5:56 pm
В реале получается, что девайс сохраняет изображение в масштабе своего экрана и со своим dpi, поэтому при отображении изображения опять в том же спрайте никаких искажений не наблюдается. Получается xcod масштабирует не верно. :cry:
Xcode имеется в виду симулятор iOS?

Post Reply