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

Tumaso

Пользователи
  • Постов

    331
  • Зарегистрирован

  • Посещение

  • Победитель дней

    39

Весь контент Tumaso

  1. Пользователь может изменить качество эффектов, но уж очень хочется облегчить всем жизнь. Пользователь должен запустить программу, а она по умолчанию не тормозит В общем я решил измерять производительность при старте, как раз висит splash-форма как заставка (она создает главное окно и после создания переключает на него и делает его главным), пользователю придется чуть дольше подождать запуска. Думаю это не проблема. Суть идеи - у меня приложение построено на фреймах, которые динамически создаю/уничтожаю. И как раз стартовый фрейм является небольшой демкой возможностей, там используется много эффектов и разных компонентов. Поэтому я создаю этот фрейм, делаю предзагрузку стилей всем компонентам фрейма (этот способ взял на этом же форуме, автор Ярослав). После этого создания фиксирую время, за которое создается скриншот этого фрейма (т.е. использую MyFrame.MakeScreenshot). И уже на основании потраченного времени оцениваю производительность железа при работе с графикой. type /// <summary> /// Производительность оборудования /// </summary> THardwarePerformance = ( /// <summary> /// Высокая производительность /// </summary> performanceHigh, /// <summary> /// Средняя производительность /// </summary> performanceMedium, /// <summary> /// Низкая производительность /// </summary> performanceLow ); function DetectPerformance(AImage: TImage): THardwarePerformance; var LTemp: TBitmap; begin // измеряем производительность оборудования CreateFrame(modeWelcome); // существующий в другом коде метод, создающий нужный фрейм LTime := Now; LTemp := Frames[modeWelcome].MakeScreenshot; try AImage.Bitmap.SetSize(LTemp.Width, LTemp.Height); AImage.Bitmap.CopyFromBitmap(LTemp); finally LTemp.DisposeOf; end; LTime := Now - LTime; // оцениваем производительность if LTime < EncodeTime(0, 0, 0, 300) then Result := performanceHigh else if LTime < EncodeTime(0, 0, 2, 0) then Result := performanceMedium else Result := performanceLow; end; Протестировал на доступных телефонах, пока определяет верно
  2. Всем привет. Никто не задавался вопросом динамического определения аппаратной скорострельности работы мобильного телефона? Суть в том, что в своем приложении я использую TGlowEffect и TInnerGlowEffect. Смотрится хорошо, но на слабых телефонах тормозит, а на мощных все работает как надо. Как бы извернуться, чтобы динамически при старте определить, слаб ли телефон для эффектов и при необходимости их просто отключить? Прописывать конкретные модели некошерно, их минимум 5 тысяч, хотелось бы программное решение.
  3. Действительно, почему то после подключения 4х устройств в берлине частично слетело SDK. Возможно из за того, что ранее новые телефоны еще не подключались к этому компу, и при установке драйверов берлин был запущен. Ярослав, спасибо за подсказку.
  4. Подниму тему. Столкнулся с аналогичной проблемой в 10.1 Berlin (с update 2). Ранее к компу одновременно подключались не более 2х андроид-устройств (samsung galaxy s3 и samsung galaxy note 3), и оба были доступны для работы. Не далее как вчера решил подключить одновременно 4е устройства (еще один samsung ), и после подключения berlin перестал видеть любые устройства (т.е. список доступных устройств пуст). При этом в Windows 7 все устройства видны, на них можно заходить и из Проводника. Delphi 10.2 Tokyo тоже все 4е устройства видит! Но учитывая кривизну FMX в токио, использую для разработки берлин. Как можно починить, может удалить какой нибудь кэш в берлине? Буду благодарен за любые идеи
  5. Способ понятен, но задача стоит применить эффект произвольному изображению в памяти. ValuesAsBitmap['Input'] и ValuesAsBitmap['output'] для, например, эффекта отражения работает без проблем. Поэтому есть необходимость аналогичного эффекта для InnerGlow. Как я предполагаю, скорее всего в указанном мною коде неверно указаны параметры эффекта. Но я взял их настройку из конструктора TInnerGlowEffect, и по идее они должны работать. Но не работают, значит есть какой то неучтенный мною нюанс
  6. Подскажите пожалуйста, как можно однократно применить эффект TInnerGlowEffect к TImage? Вариант с созданием экземпляра TInnerGlowEffect и его присоединение к TImage не подходит. Другими словами, нужно на TImage отрисовать этот эффект, и далее используется эта сформированная картинка с данным эффектом. Я смотрел пример ShaderFilters, идущий в комплекте с делфи, и накидал следующий код: var LFilter: TFilter; LFilter := TFilterManager.FilterByName('InnerGlowFilter'); LFilter.ValuesAsBitmap['Input'] := LSource.Bitmap; // исходная картинка LFilter.ValuesAsColor['Color'] := PremultiplyAlpha(MakeColor(TAlphaColorRec.Red, 0.6)); LFilter.ValuesAsFloat['BlurAmount'] := 2; LDest.Bitmap := LFilter.ValuesAsBitmap['output']; // результат в итоге получаю только картинку, состоящую из одного черного фона. Что я делаю не так?
  7. sinuke, спасибо, получил именно то что требовалось.
  8. Столкнулся со следующей проблемой - TImage игнорирует установленные значения XRadius и YRadius у TRectangle (10.1 Berlin with update 2) Суть - мне необходимо, чтобы у TRectangle углы были немного скругленные, для этого я устанавливаю XRadius и YRadius. Внутри TRectangle расположен TImage (левый верхний угол 0,0, ширина и высота совпадают с размерами TRectangle). Когда я загружаю картинку в TImage (что в дизайнере, что программно), получается что TImage отображается с прямыми углами, игнорируя XRadius и YRadius своего родителя. Свойство ClipChildren у TRectangle установлен. Как сделать так, чтобы TImage скруглялся по углам? Что интересно, TCircle в этом плане работает, обрезая TImage.
×
×
  • Создать...