gpt4 book ai didi

objective-c - 如何使用灰色模板图像创建类似 Xcode 的彩色按钮

转载 作者:行者123 更新时间:2023-12-03 17:21:56 24 4
gpt4 key购买 nike

如果我有一个使用模板图像的 NSButton,我如何像 Apple 在 Xcode 中那样为它着色?

最佳答案

没有 API 可以为按钮中的模板图像着色。在我最新的应用程序之一中,我刚刚编写了一个小工厂,它可以从灰色图像中动态创建彩色图像。我正在使用核心图像过滤器,它处理图像的速度令人难以置信。

这是工厂进行着色的主要方法:

- (NSImage *)imageNamed:(NSString *)name withOptions:(HcToolbarImageOptions)options
{
NSString *key = [self keyForName:name withOptions:options];
NSImage *image = _cache[key];
if (!image) {
NSImage *sourceImage = [NSImage imageNamed:name];
NSAssert1(sourceImage != nil, @"Could not find any image named %@", name);
if (options == 0) {
image = sourceImage;
} else {
image = [NSImage imageWithSize:sourceImage.size flipped:NO drawingHandler:^BOOL(NSRect dstRect) {
CIContext *context = [[NSGraphicsContext currentContext] CIContext];
CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort];
NSRect proposedRect = dstRect;
CGImageRef cgImage = [sourceImage CGImageForProposedRect:&proposedRect context:[NSGraphicsContext currentContext] hints:nil];
CIImage *result = [CIImage imageWithCGImage:cgImage];
if (options & HcToolbarImage_Enabled) {
CIFilter *filter1 = [CIFilter filterWithName:@"CIGammaAdjust"];
[filter1 setDefaults];
[filter1 setValue:result forKey:kCIInputImageKey];
[filter1 setValue:@0.6 forKey:@"inputPower"];
result = [filter1 valueForKey:kCIOutputImageKey];
CIFilter *filter2 = [CIFilter filterWithName:@"CIColorMonochrome"];
[filter2 setDefaults];
[filter2 setValue:result forKey:kCIInputImageKey];
[filter2 setValue:@1.0f forKey:kCIInputIntensityKey];
[filter2 setValue:[CIColor colorWithRed:0.2 green:0.5 blue:1.0] forKey:kCIInputColorKey];
result = [filter2 valueForKey:kCIOutputImageKey];
}
CGRect extent = [result extent];
CGImageRef finalImage = [context createCGImage:result fromRect:extent];
if (options & HcToolbarImage_NotKeyWindow) {
CGContextSetAlpha(cgContext, 0.5);
}
CGContextDrawImage(cgContext, dstRect, finalImage);
return YES;
}];
}
[_cache setObject:image forKey:key];
}
return image;
}

最终图像缓存在 NSMutableDictionary 中。

关于objective-c - 如何使用灰色模板图像创建类似 Xcode 的彩色按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22153276/

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