【问题标题】:NSImage +imageWithPatternColor: and NSGradient - Cocoa/MacNSImage +imageWithPatternColor: 和 NSGradient - Cocoa/Mac
【发布时间】: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 描述说它的ColorSpaceGeneric RGB Profile,但错误仍然说颜色无法转换成颜色空间Generic RGB colorspace
  • @Vince 顺便说一句,我也尝试了 .jpg 和 .tiff,但一无所获

标签: objective-c macos cocoa nscolor nsgradient


【解决方案1】:

NSGradient 不能将图案用作其中一种颜色。这就是异常告诉你的。它仅适用于可以转换为 RGB 颜色的 NSColor。如果你想让你的图案淡化到清晰,你必须用另一种方式来做。

【讨论】:

  • 解决这个问题的最佳方法可能是将纹理绘制到相关视图上,然后使用适当的混合模式在该纹理顶部绘制渐变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2011-03-07
  • 1970-01-01
相关资源
最近更新 更多