我使用GLKit,並在24幀我需要一個CGImageRef(沒有alpha層)和應用另一個CGImageRef(無alpha層)作爲它的掩碼(黑色和白色圖像)並將結果渲染爲GLKit紋理。GLKit遮罩或混合兩個紋理都來自jpegs沒有alphas
一開始我嘗試這個辦法:分配所產生的UIImage到一個UIImageView時
CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imgRef, actualMask);
雖然會工作,這將不作爲GLKit質感工作(掩碼將不適用)。不過,如果我使用重繪圖像:
UIImage *maskedImg = [UIImage imageWithCGImage:masked];
UIGraphicsBeginImageContext(maskedImg.size);
[maskedImg drawInRect:CGRectMake(0, 0, maskedImg.size.width, maskedImg.size.height)];
UIImage* resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
由此產生的圖像將被屏蔽,並在GLKit質地正確呈現。但是,這會將iPhone 4S的性能降低至6 fps左右。
我試過this masking approach沒有成功。
我已經嘗試過沒有Core Graphics並且使用GLKit混合,如this example by Ray Wenderlich所示。但是,這需要面具上的alpha透明度,這對我來說是一個難題。
我還發現了一個有趣的例子,我正在做一個名爲AVAnimator的庫和一個名爲KittyBoom的例子。這裏他們正在手動替換像素。我想用GLKit得到相同的結果。
任何進一步的方向或指導將在這裏有所幫助。提前致謝。
感謝您的答覆。我肯定會進一步調查你在這裏提供的新信息。至於你最後一個關於GLCameraRipple的評論,這個應用程序獲取相機的視頻源。這也可能來自視頻文件嗎?再次感謝。 –
該示例代碼從攝像頭捕獲中涉及的'AVCaptureOutput'出售的樣本緩衝區創建'CVOpenGLESTexture'。您還可以使用'AVAssetReader'從文件中獲取樣本緩衝區。儘管如此,有關這方面的細節仍然是一個單獨問題的佐證。 – rickster