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

Существует ли способ растягивания видео до нужных размеров под Windows?


cezif

Вопрос

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

Существует ли способ растягивания видео до нужных размеров?

Если нет, есть ли какой иной компонент под FM для вывода видео с произвольными шириной и высотой?

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

  • 1
  • Администраторы
Опубликовано

На текущий момент (RAD Studio XE6) либо просто меняйте размер видео контейнера TMediaControl. Видео встраивается под его размеры. Если нужно менять способы обрезания видео, то такой поддержки нету. Но если очень нужно, то читайте рекомендации ниже.

 

iOS

Можно в модуль FMX.Media.iOS добавить задание способа кадрирования для FPlayerLayer: AVPlayerLayer.

FPlayerLayer.setVideoGravity(GravityType);

Где GravityType одно из следующих значений:

  • AVLayerVideoGravityResize - Specifies that the video should be stretched to fill the layer’s bounds.
  • AVLayerVideoGravityResizeAspect - Specifies that the player should preserve the video’s aspect ratio and fit the video within the layer’s bounds.
  • AVLayerVideoGravityResizeAspectFill - Specifies that the player should preserve the video’s aspect ratio and fill the layer’s bounds.

Андроид

В FMX.Media.Android добавить задание способа скалирования для FPlayer: JMediaPlayer

FPlayer.setVideoScalingMode(ScallingMode);

Где ScallingMode принимает одно из следующих значений:

  • VIDEO_SCALING_MODE_SCALE_TO_FIT - Specifies a video scaling mode. The content is stretched to the surface rendering area. When the surface has the same aspect ratio as the content, the aspect ratio of the content is maintained; otherwise, the aspect ratio of the content is not maintained when video is being rendered.
  • VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING - Specifies a video scaling mode. The content is scaled, maintaining its aspect ratio. The whole surface area is always used. When the aspect ratio of the content is the same as the surface, no content is cropped; otherwise, content is cropped to fit the surface.
Windows
В FMX.Media.Win добавить задание способа скалирования видео для FVMRWindowlessControl: IVMRWindowlessControl9;
FVMRWindowlessControl.SetAspectRatioMode(Mode);

Где Mode может принимать следующие значения:

  • VMR9ARMode_None - Indicates that the VMR is not attempting to maintain the aspect ratio of the source video.
    VMR9ARMode_LetterBox - Indicates that the VMR will maintain the aspect ratio of the source video by letterboxing within the output rectangle.
  • 0
  • Администраторы
Опубликовано

Смотрите сообщение выше. Это касается только стандартных способов скалирования. 

 

Либо просто меняйте размер видео контейнера TMediaControl. Видео встраивается под его размеры. 

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

При изменении контейнера TMediaPlayerControl - видео меняется только в меньшую сторону, в большую не растягивается.

 

Простите чайника, не совсем понял, в какую часть модуля FMX.Media.Win нужно поправки внести о способе скалирования?

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

Спасибо за подсказку, в вообщем-то получилось. Сделал так:

 

  1. Создал отдельный каталог, скопировал туда модуль FMX.Media.Win.pasFMX.Controls.Win.resFMX.Filter.res (без последних двух проект не компилировался)
  2. Внес каталог в Tools - Options - Library - Library path
  3. В модуле FMX.Media.Win.pas в процедуре TWindowsMedia.UpdateMediaFromControl первой строкой в коде добавил добавление масштабирования:
procedure TWindowsMedia.UpdateMediaFromControl;
var
  P: TPointF;
  R: TRect;
  Bounds: TRectF;
  Form: TCommonCustomForm;
begin
  FVMRWindowlessControl.SetAspectRatioMode(VMR9ARMode_LetterBox); // <-- Добавить

  if FWnd <> 0 then
  ....

далее в коде закомментировал строку:

Bounds := TRectF.Create(0, 0, P.X, P.Y);

вместо P.X и P.Y (Ширина и высота видео) - ввел ширину и высоту контрола:

Bounds := TRectF.Create(0, 0, Control.AbsoluteWidth, Control.AbsoluteHeight);

После этих манипуляций видео стало растягивать под контрол.

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...