2017-09-05 7 views
0

iOS에서 GPUImage를 사용하고 있습니다. GPUImageTransformFilter를 사용하여 GPUImagePicture를 변형 (스케일링)하고 비디오에 블렌딩하는 데 문제가 있습니다.GPUImage - 블렌딩 크기를 맞추기 위해 GPUImageTransformFilter 일치

overlayImage = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"Sticker"] smoothlyScaleOutput:YES]; 

blendFilter = [GPUImageAlphaBlendFilter new]; 

transformFilter = [GPUImageTransformFilter new]; 
// [transformFilter forceProcessingAtSize:?????]; 
transformFilter.affineTransform = CGAffineTransformMakeScale(0.2f, 0.2f); 

[overlayImage addTarget:transformFilter]; 

[videoCamera addTarget:blendFilter]; 
[overlayImage addTarget:blendFilter]; 

[overlayImage processImage]; 
[videoCamera startCameraCapture]; 

내가 갖는 잘못된 결과는 이미지가 해제 변환을 보여줍니다이다 - 변환 필터가 적용되지 않았던 것처럼, 전체 크기로 여전히.

변환 된 GPUImagePicture가 블렌드 필터의 다른 내용과 정확히 같은 크기로 처리되어야합니까?

그렇다면 어떻게해야합니까? forceProcessingAtSize를 사용해야합니까? 그리고 videoCamera의 세션과 같은 것을 쿼리하여 크기를 얻을 수 있습니까? forceProcessingAtSize를 AVCaptureSessionPreset, 640x480 크기로 설정하려고 시도했지만 도움이되지 않았습니다.

감사

답변

1

당신은 아무것도 위의 코드에서 transformFilter를 연결하지 않은, 그래서 무시되고있다. 나는 당신이 당신의 변화 결과 혼합 될하려는 경우

[overlayImage addTarget:transformFilter]; 

[videoCamera addTarget:blendFilter]; 
[transformFilter addTarget:blendFilter]; 

을 읽는 코드를 수정해야 믿습니다.

forceProcessingAtSize은 기본 픽셀 크기를 조정하고 혼합 방법을 나타내지 않으므로 여기서는 원하는 것을 실제로 수행하지 않습니다. 블렌드 필터는 첫 번째 이미지의 종횡비를 사용한 다음 두 번째 이미지를 그 이미지에 맞게 늘립니다. 그것은 내가 사용하는 상당히 간단한 정규화 된 텍스처 좌표의 결과이며, 불행하게도 두 번째 이미지의 종횡비를 보존하는 옵션을 절대로 추가하지 않았습니다.

+0

답변 해 주셔서 감사합니다. GPUImage를 좋아합니다! 변환 필터의 대상으로 블렌드 필터를 추가 할 때 발생하는 문제는 전체 출력이 흰색이었고 스틸 ​​이미지를 처리 ​​할 때 transformfilter.addTarget을 수행하지 않는 다른 코드 예제를 보았 기 때문에 난 그냥 변환 필터에 대상을 추가하여 잘못된 일을하고 있다고 생각. – Cloov