2013-09-06 4 views
0

Brad Larson의 GPUImage Framework를 사용하여 UIImage 요소를 추가하고 있는데 성공적으로 이미지를 추가했지만 주요 문제는 이미지가 비디오의 종횡비로 늘어나고 있다는 것입니다. 다음은 내 코드입니다 : 나 이미지를 혼합하기 전에 필터를 변환 사용하는 것을 시도했다GPUImage 프레임 워크를 사용하여 UIImage 요소 추가하기

GPUImageView *filterView = (GPUImageView *)self.view; 
    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; 
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; 
    transformFilter=[[GPUImageTransformFilter alloc]init]; 
    CGAffineTransform t=CGAffineTransformMakeScale(0.5, 0.5); 
    [(GPUImageTransformFilter *)filter setAffineTransform:t]; 
    [videoCamera addTarget:transformFilter]; 

    filter = [[GPUImageOverlayBlendFilter alloc] init]; 
    [videoCamera addTarget:filter]; 
    inputImage = [UIImage imageNamed:@"eye.png"]; 
    sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
    [sourcePicture forceProcessingAtSize:CGSizeMake(50, 50)]; 
    [sourcePicture processImage]; 
     [sourcePicture addTarget:filter]; 
    [sourcePicture addTarget:transformFilter]; 


    [filter addTarget:filterView]; 
    [videoCamera startCameraCapture]; 

하지만, 축소지고 있지 않습니다. 센터에 이미지를 표시하고 싶습니다. 어떻게해야합니까? 감사합니다.

답변

0

올바른 길을 가고 있습니다. 다만 몇 가지 일이 있습니다.

다음 코드는 오버레이 이미지를로드하고 변환을 적용하여 실제 크기로 유지합니다. 기본적으로는 동영상 중앙에 위치합니다.

GPUImageView *filterView = (GPUImageView *)self.view; 
videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack]; 
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait; 

filter = [[GPUImageOverlayBlendFilter alloc] init]; 
transformFilter = [[GPUImageTransformFilter alloc]init]; 

[videoCamera addTarget:filter]; 
[transformFilter addTarget:filter]; 

// setup overlay image 
inputImage = [UIImage imageNamed:@"eye.png"]; 
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 

// determine the necessary scaling to keep image at actual size 
CGFloat tx = inputImage.size.width/480.0;  // 480/640: based on video camera preset 
CGFloat ty = inputImage.size.height/640.0; 

// apply transform to filter 
CGAffineTransform t = CGAffineTransformMakeScale(tx, ty); 
[(GPUImageTransformFilter *)transformFilter setAffineTransform:t]; 

// 
[sourcePicture addTarget:filter]; 
[sourcePicture addTarget:transformFilter]; 
[sourcePicture processImage]; 

[filter addTarget:filterView]; 
[videoCamera startCameraCapture]; 
관련 문제