gpt4 book ai didi

ios - 屏蔽改变 UIImage- iOS 的颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:49 26 4
gpt4 key购买 nike

这是我动态屏蔽 UIImage 的方法。它正在工作,但由于某种原因,输出图像的颜色与原始图像的颜色不同。什么会导致这个?谢谢..

- (void) setClippingPath:(UIBezierPath *)clippingPath : (UIImageView *)imgView {

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = self.imgView.frame;
maskLayer.path = [clippingPath CGPath];
maskLayer.fillColor = [[UIColor whiteColor] CGColor];
maskLayer.backgroundColor = [[UIColor clearColor] CGColor];

self.imgView.image = [self maskImage:self.imgView.image withClippingMask:[self imageFromLayer:maskLayer]];

}


- (UIImage *)imageFromLayer:(CALayer *)layer
{
UIGraphicsBeginImageContext([layer frame].size);

[layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return outputImage;
}

-(UIImage*)maskImage:(UIImage *)image withClippingMask:(UIImage *)maskImage
{
CGImageRef maskRef = image.CGImage;

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);

CGImageRef maskedImageRef = CGImageCreateWithMask([maskImage CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];

CGImageRelease(mask);
CGImageRelease(maskedImageRef);

// returns new image with mask applied
return maskedImage;

}

原始图像

enter image description here

面具

enter image description here

输出图像

enter image description here

enter image description here

最佳答案

CGImageMaskCreate 的文档提到:

When you draw into a context with a bitmap image mask, Quartz uses the mask to determine where and how the current fill color is applied to the image rectangle.

因此,如果您只想将黑色替换为白色,那么您应该能够在创建 mask 之前设置上下文颜色:

-(UIImage*)maskImage:(UIImage *)image withClippingMask:(UIImage *)maskImage
{
CGImageRef maskRef = image.CGImage;

CGContextSetFillColorWithColor( UIGraphicsGetCurrentContext( ), [ UIColor whiteColor ] );
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);

CGImageRef maskedImageRef = CGImageCreateWithMask([maskImage CGImage], mask);
UIImage *maskedImage = [UIImage imageWithCGImage:maskedImageRef];

CGImageRelease(mask);
CGImageRelease(maskedImageRef);

// returns new image with mask applied
return maskedImage;
}

您可能还想将蒙版更新为更基本的灰度 JPG,如下所示:

enter image description here

关于ios - 屏蔽改变 UIImage- iOS 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18455986/

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