gpt4 book ai didi

objective-c - 将 CGContext 复制到另一个 CGContext

转载 作者:IT王子 更新时间:2023-10-29 05:44:53 27 4
gpt4 key购买 nike

我在为 MKMapOverlayView 创建的 CGContext 中执行一些 CG 绘图操作。在我的上下文中绘制之后,我创建了一个图像并将其粘贴到 MapKit 提供的上下文中。

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
CGColorSpaceRef colorRef = CGColorSpaceCreateDeviceRGB();
CGContextRef myContext = CGBitmapContextCreate(NULL, kTileSize, kTileSize, 8, 0, colorRef, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorRef);
CGContextSetAllowsAntialiasing(myContext, TRUE);
//...cut out drawing operations...
CGImageRef image = CGBitmapContextCreateImage(myContext);
CGContextDrawImage(context, [self rectForMapRect:mapRect], image);
CGImageRelease(image);
CGContextRelease(myContext);
}

有没有一种方法可以简单地将 myContext 复制到 context 而无需创建图像?

我知道你们中的一些人会说“为什么不直接绘制到 MapKit 提供的上下文中”。不幸的是,我们在直接渲染到 context 时遇到了绘图故障。 Apple 目前正在为我们调查此问题,但与此同时,我们需要找到解决方法。我上面介绍的这个解决方法是我的“最佳”解决方案,但它有点慢。

P.S. 因为我也在寻找答案,所以我已经开始悬赏。具体来说,我的目标是 OS X。所以答案应该在那里工作。 OP 在 iOS 上寻找答案。

最佳答案

您可以使用 CGLayerRef。 layer ref 就像你在其中进行大量绘图的子上下文,然后在你完成绘制该层的内容后,将其压平到原始上下文中。

它通常用于在许多绘图调用而不是每个单独的调用中获取共享的 alpha 或阴影。

我不知道这是否仍然可以解决您遇到的任何错误,或者性能是否比两种上下文方法更好或更差。我需要更多地了解您的目标和要求。例如,你是想避免使用两个上下文来避免第二个副本,还是因为你不想为第二个图像支付内存?

关于objective-c - 将 CGContext 复制到另一个 CGContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com