• 0
AlexG

Скорость обновления окна программы

Вопрос

Возник следующий вопрос:

Допустим есть "сложная" форма, внешний вид которой должен быть нестандартным и на которой расположено N-ное количество компонент (исходим из того, что их много, некоторые из них - динамические, например - вывод видео с камеры).
"Нестандартный вид" подразумевает: наличие тени у формы, измененный внешний вид, отличный от вида по умолчанию в любой ОС.

Непосредственно вопрос звучит так.
Какая из двух следующих реализаций будет работать быстрее (отрисовка/обновление этой формы при обновлении компонент: текста, списков, вывод видео и т.д.):

Оба вида форм предопределяются в стиле.

ВАРИАНТ 1.
- Тень формы реализована в виде компонента TImage с подгруженным PNG изображением.
- Контур формы реализован компонентом TRectangle с "окантовкой" и заливкой прямоугольника заданным цветом (все без градиентов)
- Шапка формы реализована вторым прямоугольником TRectangle без "окантовки", но с заливкой другим цветом (без градиента)

ВАРИАНТ 2. Вся форма задана одним объектом TStyleObject в котором в качестве свойств установлены:
- SourceLookup - ссылка на PNG-изображение в данном стиле
- SourceLink - создан TBitmapLink, у которого заданы свойства CapInsets и SourceRect

Внешний вид у них будет практически одинаковый (хотя во втором случае он будет более корректным на любой ОС и при использовании любой видео-карты, чего не скажешь о первом варианте).
Однако, интересует именно СКОРОСТЬ отрисовки в обеих случаях!
Интересует именно теория, с точки зрения реализации самой FMX.

З.Ы. Предполагаю, что вопрос больше к разработчикам FMX, но возможно у кого-то уже есть опыт работы с подобными задачами...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2 ответа на этот вопрос

  • 0

Во первых все зависит от размеров формы

Во вторых тень сделанная с помощью PNG работает быстрей, чем тень отрисованная эффектами FMX

В третьих чисто теоретически работа со стилями, тем более 9.png, будет кушать больше ресурсов чем залить область через FillRect 

Я бы реализовывал первым вариантом (более гибкий и простой в реализации)

AlexG понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Спасибо за развернутый ответ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: Anasazi
      Всем доброго времени суток. Возникла необходимость решить такую задачу: в таблице базы MySQL хранится список изображений и их URL. Необходимо получить этот список массивом. Затем загрузить изображения и поочередно с интервалом показать их в TImage.
      Понимаю, что получить список изображений правильнее при помощи PHP скрипта, но в каком виде скрип должен вернуть данные, чтобы в Delphi получить из них массив не знаю.
      Раньше для получения изображений использовал такую процедуру. Но вопрос, где хранить изображения перед демонстрацией их в TImage? Создавать несколько MemoryStream?
      procedure LoadWebImage(url: string; image: TBitmap);
      var
        idhttp : TNetHTTPClient;
        ms : TMemoryStream;
      begin
       IdHTTP := TNetHTTPClient.Create(nil);
        ms := TMemoryStream.Create;
        try
          idhttp.Get(url, ms);
          ms.Position := 0;
          image.LoadFromStream(ms);
        finally
          ms.Free;
          idhttp.Free;
        end;
      end;
    • Автор: denprox
      Доброго времени суток! Подскажите, как узнать оригинальный размер картинки, загруженной в TImage ?
    • Автор: Genesis
      Здравствуйте , скажите пожалуйста , можно ли  на ПК преобразовать  страницу или фрагмент в формате doc в изображение в формате png, желательно без использования платных компонентов. Спасибо
    • Автор: Satellite
      Возможно ли вывести 9-patch в Timage? Если нет, то куда можно импортировать изображение такого формата? 
    • Автор: umkes
      Добрый день, возникла проблема при работе с TImage;
      У меня компонент TImage - imgRing и есть в TImageList. 
      Я динамически формирую Bitmap из копий картинки из TImageList и асайню его в TImage. На Windows все работает прекрасно, а на андроиде картинка все время пустая... Может кто-то подскажет, где я не прав
      //============================================================================== procedure TMainForm.DrawRing; //------------------------------------------------------------------------------ var bmp1, bmp2 : TBitmap; i : integer; str : TMemoryStream; begin bmp2 := TBitmap.Create; bmp2.Assign(ImageList.Source.Items[3].MultiResBitmap.Items[0].Bitmap); bmp1 := TBitmap.Create; bmp1.Assign(bmp2); bmp1.Width := ClientWidth + bmp2.Width * 10; i := 0; bmp1.Canvas.BeginScene(); while (i * bmp2.Width) < bmp1.Width do begin bmp1.Canvas.DrawBitmap(bmp2, RectF(0, 0, bmp2.Width, bmp2.Height), RectF(i * bmp2.Width, 0, (i + 1) * bmp2.Width, bmp2.Height), 1 ); inc(i); end{ while }; bmp1.Canvas.EndScene; str := TMemoryStream.Create; bmp1.SaveToStream(str); str.Position := 0; imgRing.BeginUpdate; imgRing.Bitmap.CreateFromStream(str); imgRing.EndUpdate; end{ procedure TMainForm.DrawRings }; Делаю такое потому-что TImage.WrapMode.Tile не подходит для моей задачи.
    • Автор: Евгений Корепов
      На незначительном количестве устройств, менее 0,1%, получаю ошибку "Bitmap size too big" при AImage.Bitmap.LoadFromStream(AMemoryStream). Подозреваю что ошибка происходит на слабых устройствах. Картинка 250х250 png. Код выполняется в основном потоке (в интернетах были упоминания что глючит эта операция в отдельном потоке на каких то версиях Delphi).
      Как предотвратить подобное? Можно как то определить максимальный размер картинки для текущего устройства? Или может дело не в свободной памяти, а в чем то еще?
    • Автор: kuldiegor
      Всем доброго времени суток! Обнаружил проблему, связанную с загрузкой изображения в TImage.
      Если загружать изображения с хард диска очень быстро, то как будто TImage не поспевает и вываливает access violation. Delphi xe7 Fire Monkey 64 bit Windows.
      val:=round(360*value/max); //узнаём какова часть байт в градусах improgressbar.Bitmap.LoadFromFile(ExtractFilePath(paramstr(0))+'Pictures\ProgressBar\'+inttostr(val)+'.png');  labprogressbar.Text:=strtool.intbytetostr(value,1)+'Б'+#$D#$A+'/'+#$D#$A+strtool.intbytetostr(max,1)+'Б'; Application.ProcessMessages; 
    • Автор: ivadimos
      Кто-нибудь делал картинку, которая преобразуется в круглую?
    • Автор: Dozent
      Добрый день. Столкнулся с проблемой правильного отображения. есть картинка.
      Которая должна вращаться по принципу часовой стрелки, но при изменении свойства RotationAnge происходит смещение  стрелки от своего центра вокруг которого она должна вращаться. Как правильно поворачивать стрелку?


    • Автор: gdm_it
      Здравствуйте, решил написать клиента для своего сайта, делпхи не открывал 15 лет без шуток, перешел в веб разработку,  а сейчас все возвращается на свои места как говориться
       
      так вот меня интересует теоретический набросок  использования элементов форм
       
       
      схема типичная:   слева скрытый список  MultiView1, справа рабочая область
       
      вот о рабочей области и вопрос
       
      я выбираю в меню MultiView1 СТАТЬИ(1 пункт), слева должен появиться список свежих статей, внизу панель (добавить), жмем на добавить и открывается форма добавления статьи.
       
      как это лучше реализовать?
       
      например: 
      1. накидать на каждый пункт меню панель и в них разместить свои элементы форм
      2. нагромоздить несколько форм и их подключать как то
      3. ваш вариант
       
      задача то плевая опыта пока нет 
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу