3
내가 화상 회의 응용 프로그램에서 일하고 있어요, 다음과 같은 코드가 성공적으로 스크린에 프레임을 그립니다 비디오에 CIFilter 적용 :아이폰 OS
내가 그리는 프레임에 CIFilter을 적용 할-(int)drawFrameOnMainThread{
if(mBitmapContext){
if(mDisplay){
CGImageRef imageRef = CGBitmapContextCreateImage(mBitmapContext);
#if TARGET_OS_IPHONE
UIImage *image = [UIImage imageWithCGImage:imageRef];
[self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
#elif TARGET_OS_MAC
[mDisplay setCurrentImage:imageRef];
#endif
CGImageRelease(imageRef);
}
}
return 0;
}
, 그래서 코드의 iOS 섹션을 다음과 같이 수정합니다.
UIImage *image = [UIImage imageWithCGImage:imageRef];
CIImage *beginImage = image.CIImage;
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, beginImage,
@"inputIntensity", [NSNumber numberWithFloat:0.8], nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg =
[context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
[self performSelectorOnMainThread:@selector(setImage:) withObject:newImg waitUntilDone:YES];
결과적으로 내 비디오 화면이 검은 색으로 유지됩니다. 아무도 여기서 오류를 볼 수 있습니까? 필자는 지금 몇 시간 동안이 일을 끝내고 그것을 이해할 수 없다. 나는이 문제를 해결했습니다
검은 화면을 지정하지 않고도 모든 종류의 작업을 수행한다고 말할 것입니다. 비디오가 우표의 크기가 아니라면 UIImage 소스 및 Core Image를 사용하는 비디오의 실제 장치에서는 엄청나게 느릴 것입니다. UIImage를왔다 갔다하면 Core Graphics 오버 헤드가 많이 발생합니다. 그런 다음 뷰에서 해당 이미지를 수동으로 다시 그려 보면 더 느려지 게됩니다. 또한, 내가 여기 벤치마킹 한 것처럼 : http://stackoverflow.com/a/6628208/19679 Core Image는 iOS에서와 같이 빠르지 않습니다. –
카메라에서 이러한 비디오 프레임을 가져 오는 경우 OpenGL ES 또는 내 GPUImage 프레임 워크와 같은 것을 사용하여 효율적인 비디오 필터링 및 표시를 얻고 자 할 것입니다. 이것이 네트워크 소스에서 가져온 비디오 프레임 인 경우 조금 더 어려울 수 있지만 OpenGL ES (또는 Mac 클라이언트 용 OpenGL)를 사용하여이 프레임을 업로드하고 표시하려고 할 것입니다. –
실제로 네트워크 소스에서 비디오를 가져오고 있으며 필터링을하지 않아도 성능이 뛰어납니다. ([link] (http://code.google.com/p/idoubs/)를 사용하고 있습니다.) 필터링에 대해 제안 하시겠습니까? 어쩌면 서버 쪽에서 할 수 있을까요? – Dimitar08