【发布时间】:2011-12-30 00:26:48
【问题描述】:
我正在自定义视图上绘制 NSGradient,如下所示:
- (void)drawRect: (NSRect)dirtyRect
{
NSGradient* g = [[NSGradient alloc] initWithStartingColor: _color endingColor: [NSColor clearColor]];
[g drawInRect: [self bounds] angle: 90];
}
如果_color 是正常颜色,例如[NSColor blueColor],则一切正常。问题是 _color 来自一个图案图像(在这种情况下,它大部分是灰色的,上面有一些花哨的像素),当这种情况发生时,程序会不断记录这个错误:
*** -[NSGradient initWithColors:atLocations:colorSpace:]: 颜色 NSPatternColorSpace CGImageSource=0x400367d60" )> 无法转换成色彩空间 Generic RGB colorspace
_color = [NSColor colorWithPatternImage: [NSImage imageNamed: @"mainBG.png"]]
图像完全不透明,是一个 png 文件。 有任何想法吗?也许我应该更改文件类型?我不知道...
编辑:
如果我这样定义_color:
_color = [[NSColor colorWithPatternImage: [NSImage imageNamed: @"mainBG.tiff"]] colorUsingColorSpace: [NSColorSpace genericRGBColorSpace]]
然后不显示渐变。没有。就好像我没有 drawRect: 方法一样。有什么想法吗?
【问题讨论】:
-
如何将 PNG 文件保存在 RGB 颜色空间中,然后重试相同的代码?
-
@Vince 在预览的信息窗口中,它说图像具有
ColorSync Profile sRGB IEC61966-2.1。由于sRGB IEC..作为ColorSpace 出现在错误中,我假设您的意思是我必须更改它。我该怎么做? -
你可以试试画图软件
-
@Vince 是的,我尝试使用 Photoshop 并将 sRGB 转换为通用 RGB 配置文件,但没有成功。完全相同的错误信息。奇怪的是,虽然 NSImage 描述说它的
ColorSpace是Generic RGB Profile,但错误仍然说颜色无法转换成颜色空间Generic RGB colorspace -
@Vince 顺便说一句,我也尝试了 .jpg 和 .tiff,但一无所获
标签: objective-c macos cocoa nscolor nsgradient