【发布时间】:2013-10-23 19:16:49
【问题描述】:
我正在使用 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。
我试过this masking approach 没有成功。
我已经尝试在没有 Core Graphics 的情况下使用 GLKit 混合来执行此操作,如 this example by Ray Wenderlich 所示。但是,这需要遮罩上的 alpha 透明度,这对我来说是一个交易破坏者。
我还发现了一个有趣的例子,它用一个名为 AVAnimator 的库和一个名为 KittyBoom 的例子来做我想做的事。他们在这里手动替换像素。我想使用 GLKit 得到同样的结果。
任何进一步的方向或指导都会在这里有所帮助。提前致谢。
【问题讨论】:
标签: ios iphone objective-c core-graphics glkit