如何使用CGLayer在屏幕外绘制多个图像

时间:2009-08-17 12:32:41

标签: iphone core-graphics cglayer

最终我正在研究用于iPhone的盒子模糊功能。

该功能将采用UIImage并绘制透明副本,首先是两侧,然后拍摄该图像并在上方和下方绘制透明副本,返回一个非常模糊的图像。

阅读Drawing with Quartz 2D Programming Guide,建议使用CGLayers进行此类操作。

本指南中的示例代码对我来说有点密集,所以我希望有人向我展示一个非常简单的示例,即获取 UIImage 并将其转换为 CGLayer 然后我会绘制副本并返回 UIImage

如果值是硬编码的(为简单起见),那就没问题了。这只是我的头脑,而不是生产代码。

1 个答案:

答案 0 :(得分:2)

UIImage *myImage = …;
CGLayerRef layer = CGLayerCreateWithContext(destinationContext, myImage.size, /*auxiliaryInfo*/ NULL);
if (layer) {
    CGContextRef layerContext = CGLayerGetContext(layer);
    CGContextDrawImage(layerContext, (CGRect){ CGPointZero, myImage.size }, myImage.CGImage);

    //Use CGContextDrawLayerAtPoint or CGContextDrawLayerInRect as many times as necessary. Whichever function you choose, be sure to pass destinationContext to it—you can't draw the layer into itself!

    CFRelease(layer);
}

这在技术上是我的第一个iPhone代码(我只在Mac上编程),所以要小心。不过我之前使用过CGLayer,据我所知,Quartz在iPhone上并没有什么不同。

  

...并以UIImage身份返回。

我不知道如何做这部分,因为从未与UIKit合作过。