【发布时间】:2023-03-10 11:52:01
【问题描述】:
有没有办法在不丢失图案的情况下改变图像的颜色?
【问题讨论】:
标签: iphone objective-c ipad
有没有办法在不丢失图案的情况下改变图像的颜色?
【问题讨论】:
标签: iphone objective-c ipad
试试这个(UIImage 类别):
.h
@interface UIImage (Overlay)
- (UIImage *)imageWithOverlayColor:(UIColor *)color;
@end
.m
#import "UIImage+Overlay.h"
@implementation UIImage (Overlay)
- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);
if (UIGraphicsBeginImageContextWithOptions) {
CGFloat imageScale = 1.0f;
if ([self respondsToSelector:@selector(scale)]) // The scale property is new with iOS4.
imageScale = self.scale;
UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
}
else {
UIGraphicsBeginImageContext(self.size);
}
// [self drawInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, self.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGContextDrawImage(context, rect, self.CGImage);
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextClipToMask(context, rect, self.CGImage);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
这样称呼它:
UIImage *image = [UIImage imageNamed:@"image.png"];
image = [image imageWithOverlayColor:[UIColor redColor]];
前后图片:
【讨论】:
UIImage *image = [UIImage imageNamed:@"image.png"]; image = [image imageWithOverlayColor:[UIColor redColor]];