1

내 질문/문제점이 다른 포스트와 다른 점은 내가 뷰를 스케일링하지 않고 자산 레이어 명령 (AVMutableVideoCompositionLayerInstruction)을 확장한다는 것입니다. 따라서 앵커 포인트 설정, view.center, CG Rect 스케일링 모두 작동하지 않습니다.CGAffineTransform 스케일이 센터에서 스케일링되지 않음 - 내림차순

CGAffineTransformMakeTranslation을 사용하여 저작물을 가운데에 맞춰 보이게하는 것 이외에도 매우 부정확하게 움직이는 것 이외에도 센터에서 규모를 조정하는 방법을 알아낼 수 없습니다. 실종 된 물건이 있습니까? 문서 및 가이드는별로 도움이되지 않지만 어쩌면 내가 놓친 것 같습니다.

코드는 다음과 같습니다. 미리 감사드립니다 !!! :)

또한 CGTransforms로 avasset을 내보내는 방법을 찾고있는 분들을 위해 아래 코드는 모든 단계입니다. 물론 CMTimeRanges와 같은 세부 사항을 작성해야하지만, 누군가가이 혼란스러운 것을 파악하는 데 도움이되기를 바랍니다. 석영의

-(void) goAssetsExport { 
    AVMutableComposition *composition = [[AVMutableComposition alloc] init]; 

    AVMutableCompositionTrack *firstTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

    AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition]; 
    videoComposition.frameDuration = CMTimeMake(1,30); 
    videoComposition.renderScale = 1.0; 
    videoComposition.renderSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height); 

    NSURL *movieURL = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"%@", [preloadEffectsArray objectAtIndex:i]] withExtension:@"mov"]; 
    AVURLAsset *firstAsset = [AVURLAsset URLAssetWithURL:movieURL options:nil]; 
    AVAssetTrack *firstAssetTrack = [[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 

    [firstTrack insertTimeRange:CMTimeRangeMake(firstTrackRangeMin, duration) ofTrack:firstAssetTrack atTime:firstTrackRangeMin error:nil]; 

    AVMutableVideoCompositionInstruction *transitionInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 

    AVMutableVideoCompositionLayerInstruction *fromLayer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:firstTrack]; 


    //**This is where problem might be?**// 
    CGAffineTransform Scaler = CGAffineTransformMakeScale(scaleNumber,scaleNumber); 
    CGAffineTransform Mover = CGAffineTransformMakeTranslation(scaleNumber * -100, scaleNumber * -150); 

    [fromLayer setTransform:CGAffineTransformConcat(Scaler,Mover) atTime:firstTrackRangeMin]; 

    transitionInstruction.layerInstructions = [NSArray arrayWithObject:fromLayer]; 

    videoComposition.instructions = instructionArray; 

    [self exportVideo:composition withInstructionComposition:videoComposition]; 
} 
+0

"중심에서 크기 조정"이란 의미가 무엇인지 분명하지 않습니다. 회전과 달리 크기 조정은 위치를 구분하지 않습니다. –

+0

안녕하세요, 데이비드, 불분명하면 죄송합니다. 화면의 중앙에 이미지를 확대하여 이미지의 크기를 확대하고 싶었습니다. 지금은 화면의 왼쪽 상단에서 더 크게 확장되지만 더 크게 확장됩니다. –

+0

바로 지금 당신의 변형이 이미지를 위와 왼쪽으로 움직이는 것처럼 보입니다. 당신이 원하는 것은 델타 너비/2, 델타 높이/2 (스케일링 후)로 번역하는 것입니다. –

답변

0

CGAffineTransform 작품은 그 시작해야하는 위치에서 점의 좌표 시스템 :

CGAffineTransform translate = CGAffineTransformMakeTranslation((x,y); 
CGAffineTransform scale = CGAffineTransformMakeScale(q,z); 
CGAffineTransform finalTransform = CGAffineTransformConcat(scale, CGAffineTransformConcat(translate, assetTrackForVideo1.preferredTransform)); 
     [layerInstructionForVideo setTransform:finalTransform atTime:kCMTimeZero]; 
     [layerInstructions addObject:layerInstructionForVideo]; 

하는 종류의 나를 위해 일을 변환하는.

편집 : 내 실수는 모든 코드를 수정하는 것을 잊지 마세요!

+0

감사합니다 Rijii_Kot, 두 CGAffineTransformConcat을 사용하여 내가 필요로하는 곳으로 가져 오지 않았다고 생각하지 마십시오. 어떻게 shrinkWidth와 translateTocenter 값을 계산합니까? –

+0

finalTransform translate and scale CGAffineTransform을 사용하여 대답을 편집하십시오. –