Чтобы просто перевернуть (отразить) видео по горизонтали, используйте отрицательное значение x для масштабирования:
CGAffineTransform scale = CGAffineTransformMakeScale( -1.0, 1.0);
Редактировать : Относительно вашего более общего вопроса о том, как позиционировать дорожки: Для каждой задействованной видео дорожки:
- построить ограничивающий прямоугольник на основе исходного размера дорожки - это исходный прямоугольник
- спросите себя, где трек должен заканчиваться, с точки зрения происхождения и размера в полученном видео - это даст вам пункт назначения
Затем вы можете получить соответствующее аффинное преобразование с помощью функции:
CGAffineTransform NHB_CGAffineTransformMakeRectToRect( CGRect srcRect, CGRect dstRect)
{
CGAffineTransform t = CGAffineTransformIdentity;
t = CGAffineTransformTranslate( t, dstRect.origin.x - fmin( 0., dstRect.size.width), dstRect.origin.y - fmin( 0., dstRect.size.height));
t = CGAffineTransformScale( t, dstRect.size.width / srcRect.size.width, dstRect.size.height / srcRect.size.height);
return t;
}
Для зеркального отображения укажите отрицательный размер для соответствующей оси (часть - fmin(,)
компенсирует смещение).
Учитывая видео дорожку и предполагая, например, что дорожка должна быть зеркально отражена к правой половине видео 640x480, вы можете получить соответствующее преобразование с помощью:
CGSize srcSize = videoTrack.naturalSize;
CGRect srcRect = CGRectMake( 0, 0, srcSize.width, srcSize.height);
CGRect dstRect = CGRectMake( 320, 0, -320, 480);
CGAffineTransform t = NHB_CGAffineTransformMakeRectToRect(srcRect, dstRect);
Конечно, это может растянуть видео дорожку; чтобы сохранить соотношение сторон, вам нужно будет учитывать исходный размер при расчете целевого прямоугольника.
Некоторые замечания:
- обратите внимание, что в
NHB_CGAffineTransformMakeRectToRect
я сознательно решил начать с матрицы тождеств, а затем добавить необходимые преобразования по одному. Таким образом, можно построить гораздо более сложные преобразования, включая вращение. Как я уже сказал, попытайтесь понять аффинные преобразования, они действительно мощные
AVAssetTrack
s naturalSize
иногда возвращает неверные результаты для некоторых видео со сложными определениями SAR / PAR. Чтобы сделать это пуленепробиваемым, вам нужно будет определить размер по размерам в соответствующих описаниях форматов, но это совершенно новая тема ...