Перейти к содержанию
Fire Monkey от А до Я
  • 0

Кроссплатформенное приложение по-разному масштабирует графику в Windows и Android


Lev

Вопрос

Опубликовано

Добрый день! Делаю кроссплатформенное приложение. В TBitmap в памяти "рисую" картинку, затем передаю ее на TImage через TCanvas:

  with Image1.Bitmap.Canvas do begin
    BeginScene;
    DRect := TRectF.Create(0, 0, MonsterBitmap.Width - 1, MonsterBitmap.Height - 1);
    DrawBitmap(MonsterBitmap, DRect, DRect, 1, true);
    EndScene;
  end;

В Windows-приложении все нормально, области рисования заполняются четко как положено, без всякого масштабирования.

А вот в Android-приложении на моем телефоне картинка почему-то растягивается в три раза! А на телефоне жены - в два раза! В чем подвох, где нужно отключить паразитное масштабирование?

Android.png

Windows.png

Рекомендуемые сообщения

  • 0
Опубликовано
4 часа назад, haword сказал:

scale на windows 1 на android в зависимости от разрешения экрана. попробуйте рисовать не на image а на panel например или другой контрол. 

Спасибо за советы, попробовал. На panel андроид-приложение виснет при старте, зато компонент ImageControl отображал все правильно, но... вокруг картинки появилась дурацкая белая рамка, которую никак не отковыряешь (((

Готов уже считать масштабирование сам, однако не ясно, откуда брать данные, чтобы коэффициент растяжения/сжатия рассчитать?

  • 0
Опубликовано

Все, порядок, победил!

Помогло вот это:

if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
  begin
    LogicScreenSize := ScreenService.GetScreenSize.Round;
    ScreenScale := ScreenService.GetScreenScale;
    GlobalScreenScale := ScreenScale;
    Memo1.Lines.Add(Format('Logical size: %d, %d', [LogicScreenSize.X, LogicScreenSize.Y]));
    Memo1.Lines.Add(Format('Phisical size: %f, %f', [LogicScreenSize.X * ScreenScale, LogicScreenSize.Y * ScreenScale]));
    Memo1.Lines.Add(Format('Scale coeff: %f',[ScreenService.GetScreenScale]));
  end
  else GlobalScreenScale := 1;

Далее коэффициент используется при DrawBitmap у второго прямоугольника и вуаля)))

 

  • 0
Опубликовано
В 15.11.2021 в 17:52, haword сказал:

scale на windows 1 на android в зависимости от разрешения экрана. попробуйте рисовать не на image а на panel например или другой контрол. 

Вы неожиданно собрали в череп мой взорванный мозг!

Была похожая ситуация, когда я явно задаю размер Image.Bitmap.SetSize, рисую с таким же RectF и вижу на экране левую верхнюю четверть изображения. C TImageControl было всё в порядке. В итоге для задания размера создал TBitmap и сделал Image.Bitmap.Assign

Вообще то эмбра утверждает, что TImage нужно использовать для рисования на контроле, а если это просто картинка на форме, то TImageControl. Если ещё нужны функции редактирования юзером, то TImageViewer. TImageControl содержит TImage с WrapMode=Fit, только не даёт к нему доступа. Я в погоне за быстродействием хотел готовить картинку с размером, совпадающим с размером на экране, чтобы исключить масштабирование, но не понял как поймать размер экрана внутри "дурацкой белой рамки". Но всё равно рисование на TImageControl.Bitmap приводит к тому, что он переносит картинку в TImageControl.Image.Bitmap, если я правильно понимаю, а это уже не про быстродействие.

В случае как у автора ветки, я думаю стоило рисовать прямо на Image.Bitmap, а если переносить целиком с совпадающими размерами, то Assign.

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...