gpt4 book ai didi

iphone - iOS:使用 CoreGraphics 进行两步图像处理

转载 作者:可可西里 更新时间:2023-11-01 03:09:14 27 4
gpt4 key购买 nike

使用 CoreGraphics(在我的 drawRect 方法中),我尝试将混合模式应用于图像(透明 png),然后调整结果的 alpha。我假设这需要分两步完成,但我可能是错的。这是我目前所拥有的(效果很好):

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSaveGState(context);

//SET COLOR - EDIT... added a more practical color example
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1);

//flips drawing context (apparently this is necessary)
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);//flip context

//DRAW PIN IMAGE
UIImage *pin = [UIImage imageNamed:@"pin"];
CGRect pinrect = CGRectMake(12, 17, 25, 25);
CGContextDrawImage(context, pinrect, pin.CGImage);//draws image in context

//Apply blend mode
CGContextSetBlendMode(context, kCGBlendModeColor);
CGContextClipToMask(context, pinrect, pin.CGImage); // restricts drawing to within alpha channel

//fills context with mask, applying blend mode
CGContextFillRect(context, pinrect);

CGContextRestoreGState(context);

// -- Do something here to make result 50% transparent ?? --

我假设我需要将所有这些绘制到某处某种单独的上下文中,调用 CGContextSetAlpha(...),然后将其重新绘制回我的原始上下文,但是我不确定如何。在我的最终 CGContextFillRect 之前设置 alpha 只会改变应用混合模式的量,而不是整个图像的 alpha。

编辑:已发布截图

enter image description here

提前致谢。

最佳答案

使用透明层,您可以将混合应用到以 100% 绘制的图像并以 50% 显示结果。结果如下所示:
Image showing output我使用了带纹理的背景,这样您就可以清楚地看到下面的图像对所有内容都是 50% 透明的,而不是像我之前的尝试那样只看到另一个图像。这是代码:

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);//flip context

CGRect fullImageRect = (CGRect){42,57,100,100};
CGRect transparentImageRect = (CGRect){12,17,100,100};
CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 1);

// Draw image at 100%
UIImage *testImage = [UIImage imageNamed:@"TestImage"];
CGContextDrawImage(context,fullImageRect,testImage.CGImage);

// Set 50% transparency and begin a transparency layer. Inside the transparency layer, the alpha is automatically reset to 1.0
CGContextSetAlpha(context,0.5);
CGContextBeginTransparencyLayer(context, NULL);
// Draw the image. It is viewed at 100% within the transparency layer and 50% outside the transparency layer.
CGContextDrawImage(context, transparentImageRect, testImage.CGImage);
// Draw blend on top of image
CGContextClipToMask(context, transparentImageRect, testImage.CGImage);
CGContextSetBlendMode(context, kCGBlendModeColor);
CGContextFillRect(context, transparentImageRect);
// Exit transparency layer, causing the image and blend to be composited at 50%.
CGContextEndTransparencyLayer(context);

编辑:删除了旧内容,因为它占用了大量空间并且没有帮助。如果您想查看,请查看修订历史。

关于iphone - iOS:使用 CoreGraphics 进行两步图像处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902667/

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