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

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


cezif

Вопрос

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

  • 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);

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

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