gpt4 book ai didi

ios - 使用 CGLayerRef 和 CGContextDrawLayerInRect 屏蔽图像

转载 作者:行者123 更新时间:2023-12-01 18:37:55 25 4
gpt4 key购买 nike

我想在屏幕外渲染中使用 CGLayerRef 用另一个图像屏蔽图像,因为它适用于文档中提到的高质量渲染

Core Graphics Layer Drawing : CGLayer objects allow your application to use layers for drawing. Layers are suited for the following: High-quality offscreen rendering of drawing that you plan to reuse.



但是我在objective-c中找不到任何我可以理解它是如何工作的例子。在我的上下文中,我想用我以前这样做的形状图像(纯色形状)来掩盖图像
//The context I use to mask my image with the mask image.
CGColorSpaceRef colorSpace= CGColorSpaceCreateDeviceRGB();
CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, _bigImageRect.size.width, _bigImageRect.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);

//Mask image
CGContextClipToMask(mainViewContentContext,
CGRectMake(0,
-_bigImageRect.origin.y,
_bigImageRect.size.width,
_bigImageRect.size.height),
_maskImage.CGImage);

//Drawing the image on the mask image.
CGContextDrawImage(mainViewContentContext,
CGRectMake(0,
0,
_bigImageRect.size.width,
_bigImageRect.size.height),
_ImageToBeMasked.CGImage);

CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);
UIImage*maskedImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
CGImageRelease(mainViewContentBitmapContext)
return maskedImage;

但是我怎样才能使用下面的 CGLayers 来屏蔽呢?我很感激任何帮助。
CGLayerRef layer = CGLayerCreateWithContext(mainViewContentContext, _bigImageRect.size, NULL);
CGContextDrawLayerInRect(mainViewContentContext, _bigImageRect, layer);
CGLayerRelease(layer);
//And then.. how can I do the masking using this CGLayerRef???

最佳答案

我通常编写 Swift 代码,但曾经我还必须处理屏蔽和 CGLayer。

我通过以下步骤解决了这个问题:

  • 画你的面具
  • 将混合模式更改为 CGBlendMode.sourceIn
  • 画出你的“彩色”图像。

  • 这是因为 CGBlendMode.sourceIn告诉上下文将源图像的 alpha 值与现有像素的颜色相乘。因此,掩码的不可见部分 ( alpha = 0.0) 将保持不可见。

    CGBlendMode 的 Apple 文档: https://developer.apple.com/documentation/coregraphics/cgblendmode

    关于ios - 使用 CGLayerRef 和 CGContextDrawLayerInRect 屏蔽图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734422/

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