2012-12-15 3 views
2

저는 GPUImage 라이브러리를 처음 사용합니다.GPUImage : 이미지에 다른 필터를 적용하고 크기를 조정하여 결과를 출력 이미지에 바르는 방법

카메라에서 프레임을 가져 와서 실시간으로 필터링하는 데 사용하고 있습니다. 내가 개발중인 필터에 다른 필터 매개 변수를 사용하고 있습니다.

다른 필터와 병렬로 카메라 이미지를 필터링하는 방법을 알아 냈습니다.하지만 지금하고 싶은 것은 4 개의 필터링 된 이미지가 큰 출력 이미지를 만들기 위해 함께 바둑판 식으로 배열 된 결과 이미지를 출력하는 것입니다.

제가 생각하기에 합성 이미지를 얻으려면 GPUImageTransformFilter 인스턴스와 GPUImageAddBlendFilter 인스턴스를 연결할 수 있습니다. 예를 들어, 아래 두 이미지를 스케일링하고, 나란히 놓는 간단한 경우 다음 이미지의 에지로 변환되는 두 이미지는 서로 결과를 스케일링 중첩되는에

self.transform1 = [[GPUImageTransformFilter alloc] init]; 
_transform1.affineTransform = CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5); 

self.transform2 = [[GPUImageTransformFilter alloc] init]; 
_transform2.affineTransform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformIdentity, 0.5, 0.5), 1.0, 0.0); 

self.blendFirst1 = [[GPUImageAddBlendFilter alloc] init]; 

[_transform1 addTarget:_blendFirst1]; 
[_transform2 addTarget:_blendFirst1]; 

이 있지만 초래 나머지 절반은 비어 있습니다.

큰 이미지를 만들기 위해 더 작은 이미지의 크기를 조정하고 바둑판 식으로 배열하는 방법에 대한 조언을 주시면 감사하겠습니다.

고맙습니다.

답변

4

변형을 사용하여이 작업을 수행 할 수 있지만 4 개의 이미지를 하나의 스틸 프레임으로 만들려면 3 개의 블렌드가 필요합니다. 이 작업을 수행하는 데 가장 빠른 또는 가장 메모리 효율적인 경로가 될 수 없습니다.

GPUImageTwoInputFilter를 서브 클래 싱하거나 완전히 새로운 다중 입력 필터를 만든 다음 해당 필터를 사용하여 네 개의 이미지를 모두 렌더링 할 것을 제안합니다. 사람들은 이것을 통해 3 또는 4 개의 필터 입력 블렌드를 만들었습니다. 이것이 아마도 여기에서 가장 효율적인 경로 일 것입니다.

필터의 조각 셰이더는 각 입력 이미지에 대해 하나씩 네 개의 쿼드를 렌더링하거나 주어진 픽셀에 적절한 색을 제공하기 위해 네 개의 텍스처에서 선택적으로 샘플링 한 셰이더를 가질 수 있습니다. 전자는 더 빠르지 만 기본 혼합 필터를 수정하는 데 좀 더 많은 OpenGL ES 코드를 작성해야 할 수도 있습니다. 후자는 정점 및 조각 셰이더에 간단한 조정을 사용하지만 셰이더의 조건에 따라 작업 속도가 느려질 수 있습니다.

관련 문제