我正在使用 GLKit,在 24 fps 时,我需要使用 CGImageRef(无 alpha 层)并将另一个 CGImageRef(无 alpha 层)作为蒙版(黑白图像)并将结果渲染为 GLKit 纹理。
起初我尝试了这种方法:
CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imgRef, actualMask);
虽然在将生成的 UIImage 分配给 UIImageView 时会起作用,但这不会作为 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。
我尝试过这种掩蔽方法但没有成功。
我已经尝试在没有 Core Graphics 的情况下使用 GLKit 混合来执行此操作,如 Ray Wenderlich 在此示例中所示。但是,这需要蒙版上的 alpha 透明度,这对我来说是一个交易破坏者。
我还发现了一个有趣的例子,它用一个名为 AVAnimator 的库和一个名为 KittyBoom 的例子来做我想做的事。他们在这里手动替换像素。我想使用 GLKit 得到同样的结果。
任何进一步的方向或指导都会在这里有所帮助。提前致谢。