Objective c NSImage+;带有图案颜色的图像:和NSGradient-Cocoa/Mac

Objective c NSImage+;带有图案颜色的图像:和NSGradient-Cocoa/Mac,objective-c,macos,cocoa,nscolor,nsgradient,Objective C,Macos,Cocoa,Nscolor,Nsgradient,我正在自定义视图上绘制一个NSGradient,如下所示: - (void)drawRect: (NSRect)dirtyRect { NSGradient* g = [[NSGradient alloc] initWithStartingColor: _color endingColor: [NSColor clearColor]]; [g drawInRect: [self bounds] angle: 90]; } _color = [[NSColor colorW

我正在自定义视图上绘制一个
NSGradient
,如下所示:

- (void)drawRect: (NSRect)dirtyRect
{
    NSGradient* g = [[NSGradient alloc] initWithStartingColor: _color endingColor: [NSColor clearColor]];   
    [g drawInRect: [self bounds] angle: 90];
}
_color = [[NSColor colorWithPatternImage: [NSImage imageNamed: @"mainBG.tiff"]] colorUsingColorSpace: [NSColorSpace genericRGBColorSpace]]
如果
\u color
是正常颜色,例如
[NSColor blueColor]
,则一切正常。问题在于,
\u color
来自图案图像(在本例中,图案图像大部分为灰色,上面有一些奇特的像素),当出现这种情况时,程序会不断记录此错误:

***-[NSGradient InitWithColor:atLocations:colorSpace:]:颜色NSPatternColorSpace CGImageSource=0x400367d60” )>无法转换为颜色空间通用RGB颜色空间

\u color=[NSColor colorWithPatternImage:[NSImage ImageName:@“mainBG.png”]

该图像完全不透明,是一个png文件。 有什么想法吗?也许我应该改变文件类型?我不知道

编辑: 如果我这样定义
\u color

- (void)drawRect: (NSRect)dirtyRect
{
    NSGradient* g = [[NSGradient alloc] initWithStartingColor: _color endingColor: [NSColor clearColor]];   
    [g drawInRect: [self bounds] angle: 90];
}
_color = [[NSColor colorWithPatternImage: [NSImage imageNamed: @"mainBG.tiff"]] colorUsingColorSpace: [NSColorSpace genericRGBColorSpace]]

然后没有显示渐变。什么都没有。就像我没有
drawRect:
方法一样。有什么想法吗?

NSGradient不使用图案作为颜色之一。这就是例外情况告诉你的。它只适用于可以转换为RGB颜色的NSColor。如果你想让图案淡入透明,请使用y你必须用另一种方法来做。

将PNG文件保存在RGB颜色空间中,然后重试相同的代码如何?@Vince在预览中的信息窗口中说,图像具有
颜色同步配置文件sRGB IEC61966-2.1
。由于
sRGB IEC..
作为颜色空间出现在错误中,我想你的意思是我必须更改它t、 我该怎么做?你可以试试画画software@Vince是的,我试过使用Photoshop并从sRGB转换为通用RGB配置文件,但没有成功。完全相同的错误消息。奇怪的是,尽管NSImage的描述说明它的
颜色空间
通用RGB配置文件
,但错误仍然说明e color无法转换为颜色空间
通用RGB colorspace
@Vince顺便说一句,我也尝试了.jpg和.tiff,但一无所获可能最好的方法是将纹理绘制到相关视图上,然后使用适当的混合模式在纹理顶部绘制渐变。