-
Постов
1 204 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Активность репутации
-
Rusland отреагировална Error в Небольшой обмен опытом. О размере текста, TTextLaout.
*** Небольшой обмен опытом ***
Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками.
function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF;
Функция для расчета размера прямоугольника, занимаемого однострочным текстом.
Параметры:
Text - Текст Font - Шрифт с которым будет выводиться текст Size - если 0, то Font.Size будет использоваться из Font, иначе из данного параметра Исходный код:
uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(9999, 9999); TextLayout.Font.Assign(Font); if not SameValue(0, Size) then begin TextLayout.Font.Size := Size; end; TextLayout.WordWrap := False; TextLayout.Trimming := TTextTrimming.None; TextLayout.HorizontalAlign := TTextAlign.Leading; TextLayout.VerticalAlign := TTextAlign.Leading; finally TextLayout.EndUpdate; end; Result.Width := TextLayout.Width; Result.Height := TextLayout.Height; finally TextLayout.Free; end; end; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer;
Функция возвращающая максимально возможный размер шрифта, для текста вписанного в заданный прямоугольник.
Параметры:
Text - Текст Font - Шрифт с которым будет выводиться текст Width, Height - Ширина и высота прямоугольника MaxFontSize - Максимально возможный размер шрифта Исходный код:
uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; const cMaxFontSize = 512; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; var Size, Max, Min, MaxIterations: Integer; Current: TSizeF; begin Max := Trunc(MaxFontSize); Min := 0; MaxIterations := 20; repeat Size := (Max + Min) div 2; Current := CalcTextSize(Text, Font, Size); if ((Abs(Width - Current.Width) < 1) and (Width >= Current.Width)) and ((Abs(Height - Current.Height) < 1) and (Height >= Current.Height)) then break else if (Width < Current.Width) or (Height < Current.Height) then Max := Size else Min := Size; Dec(MaxIterations); until MaxIterations = 0; Result := Size; end; ---
Также данные функции можно найти в этом юните
-
Rusland отреагировална Pax Beach в [TJMediaRecorder] Запись видео в Android. Native и Intent
Интерфейс SurfaceView служит для этого.
-
Rusland отреагировална Равиль Зарипов (ZuBy) в [TJMediaRecorder] Запись видео в Android. Native и Intent
вот так можно активировать фронтальную камеру VideoRecorder_front.zip
-
Rusland отреагировална Pax Beach в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
Забирайте )
-
Rusland отреагировална Pax Beach в [TJMediaRecorder] Запись видео в Android. Native и Intent
Обещал вам продемонстрировать возможность записи видео в Android.
Представляю решение с исходными кодами (VideoRecord.zip) для изучения этой возможности и использования в своих проектах.
На представленном снимке есть 2 главных кнопки: "Modal Intent Record" и "Native Record".
Modal Intent Record — удобно использовать в приложениях, потому что запись ведется приложением камеры, поставляемым с телефоном. После съемки в приложение возвращается сообщение о результатах — удачно/неудачно.
Native Record — метод на базе интерфейса JMediaRecorder, используется, когда Intent Record не подходит. Например в Local Android сервисе ;-)
Пользуйтесь на здоровье.
Большая просьба к сообществу — помочь в комментариях с подбором оптимальных параметров записи видео в JMediaRecorder. Установленные сейчас параметры 640х480, и качество видео хромает.
Нужно научиться переключать камеры, менять степень сжатия, включать/выключать вспышку, звук затвора.
Здесь люди уже подбирали варианты параметров, но нужно протестировать на приложении из RAD Studio.
На ресурсе разработчиков Android тема по JMediaRecorder находится здесь.
-
Rusland получил реакцию от AngryOwl в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
Ждем рассказ
-
Rusland отреагировална Равиль Зарипов (ZuBy) в Fire-Monkey в Telegram
1) чат не создавался как решение проблемных вопросов, мы всегда отправляем на форум, если тема достойна огласки
2) чат создан чтобы объединить разработчиков FMX, т.к. неформальное общение на форуме не поощряется
3) в чате решаются проблемы одной строкой
4) рассуждения что такое "хорошо", что такое "плохо"
5) с помощью чата решено не мало вопросов (от себя, спасибо активным участникам чата в тестировании)
мы никому насильно не навязываем, кому интересно такая атмосфера они уже с нами
-
Rusland получил реакцию от Pax Beach в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
Ждем рассказ
-
Rusland отреагировална Равиль Зарипов (ZuBy) в Fire-Monkey в Telegram
Почистил тему, т.к. был оффтоп
Напоминаю: Присоединяйтесь к нашему ламповому чату в телеграм, обсуждаем много всего интересного.
-
Rusland отреагировална zairkz в Fire-Monkey в Telegram
Создана группа для знакомства и общения разработчиков, использующих инструменты Fire-Monkey.
Небольшой свод правил в группе Fire-Monkey:
- Не стоит описывать проблему, скрины и тд. не изучив необходимую литературу и форум, если решения все-таки нет, необходимо создать тему на форуме fire-monkey.ru и скинуть в группу ссылку;
- необходимо учитывать часовые пояса, в случае если на тему в Форуме долго нет ответа;
- можно постить новости IT-рынка связанных с Fire-Monkey и RAD-studio, iOS и Android;
- «баяны», «мемы» и приколы касательно тематике чата приветствуются, желательно в небольшом количестве;
- скриншоты и описание программ написанных на Fire-Monkey тоже приветствуются;
- будьте вежливыми, ведь вежливость – это утонченность речи, благопристойность манер и поведения;
Запрещено:
- запрещено задавать элементарные вопросы касательно разработки, для этого есть куча литературы;
- запрещены сообщения с большим описание проблемы и кода, для этого есть всем известный форум;
- навязчивая реклама компании\приложения в чате под запретом;
- оскорбления в адрес участников и в адрес Embarcadero запрещены;
- запрещены спам, порнография и подобная грязь;
@fire_monkey в Telegram
-
Rusland отреагировална Alex7wrt в Видео из картинок
Подозреваю, что это связано с тем, что картинка размером 1317*66, а должна быть 1320*66 (20*66=1320). Проверил свою серию изображений в вашей программе, где размеры совпадают - воспроизвелось нормально.
-
Rusland получил реакцию от Steepe_Hare в Видео из картинок
Вот пример Осипова c BitmapListAnimation... но у меня почему-то картинка едет в сторону при анимации. Может кто-нибудь сможет разобраться в чем причина?
-
-
Rusland отреагировална Pax Beach в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
А что именно интересует?
Я сделал тестовое приложение Android — пишет голос и видео, двумя вариантами камерой телефона и нативным MediaRecorder, без торможения и с хорошим FPS.
Пробую сейчас в сервис это запихать )
-
Rusland отреагировална Pax Beach в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
Я знал, что вы спросите )
Еще разбираюсь с некоторыми параметрами.
Пусть побудет интрига, часа через 4 закончу с делами, создам отдельный топик по этому поводу, все расскажу.
UPD:
Собственно, если не терпится узнать, все написано здесь.
-
-
Rusland получил реакцию от Kitty в Видео из картинок
Вот пример Осипова c BitmapListAnimation... но у меня почему-то картинка едет в сторону при анимации. Может кто-нибудь сможет разобраться в чем причина?
-
Rusland получил реакцию от AngryOwl в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
Нет смысла спрашивать у человека, который задал единственный вопрос на форме и больше не появлялся )
Хотя меня тоже интересует тема записи видео в Android
-
Rusland получил реакцию от Равиль Зарипов (ZuBy) в [TVideoCaptureDevice] Как оптимизировать скорость считывания данных с камеры?TVideoCaptureDevice
Нет смысла спрашивать у человека, который задал единственный вопрос на форме и больше не появлялся )
Хотя меня тоже интересует тема записи видео в Android
-
Rusland получил реакцию от Равиль Зарипов (ZuBy) в Отправка данных по http в фоновом режиме
Local-сервис для этого вполне подходит, главное сделать его перезапускаемым (Sticky). В разделе Сервис уже довольно много примеров, стоит их посмотреть. К сожалению, заряд батареи действительно будет быстро таять. Может не стоит так часто дергать сеть?
PS. С помощью монитора отслеживайте, выводя лог, или с помощью дебага действительно ли ваш сервис нормально запускается и работает (с TTimer точно не работает).
-
Rusland отреагировална enatechno в TBitmap -> TJPEGImage и TgifImage
Для конвертации можете использовать TBitmapCodecManager. Например, так я его использую для сохранения файлов в различном формате:
var aExtention, aFileName: string; aFileStream: TFileStream; aSaveParams: TBitmapCodecSaveParams; aSurf: TBitmapSurface; aBitmap: TBitmap ..... aFileStream := TFileStream.Create(aFileName, fmCreate); try aSurf := TBitmapSurface.Create(); try aSurf.Assign(aBitmap); aSaveParams.Quality := 70; TBitmapCodecManager.SaveToStream(aFileStream, aSurf, aExtention, @aSaveParams); finally FreeAndNil(aSurf); end; finally FreeAndNil(aFileStream); end; Для сохранения jpg использую aExtention='.jpg' и т.д.
И почему Вы используете TJPEGImage и TgifImage? Они разве есть в FMX? TImage.Bitmap читается из файла так:
var aImage: TImage; aFileName: string; ... aImage.Bitmap.LoadFromFile(aFileName);
-
Rusland отреагировална Brovin Yaroslav в Возвращаясь к вопросу о подсчете высоты текста TListView
Вот пример вычисления высоты итема. ListViewVariableHeightItems2.zip
Я этот пример показывал на лонче в питере.
-
Rusland получил реакцию от Kitty в У меня не работает DrawBitmap
Ну все правильно. Картинка 70 на 70, часть картинки черная, а Rect с размерами TRectF.Create(50, 30, 120, 100);
-
-
Rusland получил реакцию от Равиль Зарипов (ZuBy) в анимация батарейки с управлением "уровня заряда"
Вот как можно получить уровень заряда.
В Image меняйте картинку на соответствующую уровню заряда.