gpt4 book ai didi

ios - 如何在 iOS 中更改部分透明图像的颜色?

转载 作者:IT王子 更新时间:2023-10-29 08:15:48 24 4
gpt4 key购买 nike

我有一个具有部分透明度的单色图像。我有图像的普通版本和@2X 版本。我希望能够用代码将图像着色为不同的颜色。下面的代码适用于普通图像,但 @2X 最终会出现伪影。正常图像可能有类似的问题如果是这样,我无法检测到它的分辨率。

+(UIImage *) newImageFromMaskImage:(UIImage *)mask inColor:(UIColor *) color {
CGImageRef maskImage = mask.CGImage;
CGFloat width = mask.size.width;
CGFloat height = mask.size.height;
CGRect bounds = CGRectMake(0,0,width,height);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextClipToMask(bitmapContext, bounds, maskImage);
CGContextSetFillColorWithColor(bitmapContext, color.CGColor);
CGContextFillRect(bitmapContext, bounds);

CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(bitmapContext);
CGContextRelease(bitmapContext);

UIImage *result = [UIImage imageWithCGImage:mainViewContentBitmapContext];
return result;
}

如果重要,使用 UIImage imageNamed: 加载蒙版图像。此外,我确认在视网膜模拟器上运行时正在加载 @2X 图像。

更新:以上代码有效。我看到的伪像是由图像的消费者进行的额外转换造成的。这个问题可以删除,因为它不再是一个真正的问题或留给后代。

最佳答案

我更新了上面的代码以说明视网膜分辨率图像:

- (UIImage *) changeColorForImage:(UIImage *)mask toColor:(UIColor*)color {

CGImageRef maskImage = mask.CGImage;
CGFloat width = mask.scale * mask.size.width;
CGFloat height = mask.scale * mask.size.height;
CGRect bounds = CGRectMake(0,0,width,height);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, width, height, 8, 0, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
CGContextClipToMask(bitmapContext, bounds, maskImage);
CGContextSetFillColorWithColor(bitmapContext, color.CGColor);
CGContextFillRect(bitmapContext, bounds);

CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(bitmapContext);
CGContextRelease(bitmapContext);

return [UIImage imageWithCGImage:mainViewContentBitmapContext scale:mask.scale orientation:UIImageOrientationUp];
}

关于ios - 如何在 iOS 中更改部分透明图像的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423210/

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