【问题标题】:Creating a template image dynamically for OSX menu bar为 OSX 菜单栏动态创建模板图像
【发布时间】:2016-06-26 23:24:17
【问题描述】:

我在为 OSX 菜单栏创建模板图像时遇到问题。据我所知,它必须是 PDF 图像。为此,我有:

var pageRect: CGRect = CGRectMake(0, 0, CGFloat(10), CGFloat(barHeight))
let pdfData: NSMutableData = CFDataCreateMutable(nil, 0)
let pdfConsumer = CGDataConsumerCreateWithCFData(pdfData as CFMutableDataRef)
let pdfContext = CGPDFContextCreate(pdfConsumer, &pageRect, nil)

然后我在 PDF 中绘图:

CGPDFContextBeginPage(pdfContext, nil)
CGContextSetRGBFillColor (pdfContext, 1, 0, 0, 1)
CGContextFillRect (pdfContext, CGRectMake (0, 0, 200, 100 ))
CGPDFContextEndPage(pdfContext)

然后我尝试创建一个 NSImage:

let image = NSImage(data: pdfData)

并将其添加到状态项的图像属性中:

button.image = image

但是,这行不通。我曾尝试将图像保存到磁盘并打开它,但收到图像已损坏的消息,所以我怀疑错误是在将 pdfData 转换为 NSImage 时出现错误,尽管我对此并不完全有信心。无论如何,任何帮助将不胜感激。

【问题讨论】:

    标签: macos cocoa


    【解决方案1】:

    模板图像不一定必须是 PDF。要使NSImage 的实例成为模板图像,只需将其template 属性设置为true。

    无论图像的性质如何(位图、PDF 等),系统只会在模板图像时使用其 Alpha 通道。颜色通道被忽略。

    如果文件名-减-扩展名以“模板”结尾,系统会自动将文件加载的图像标记为模板图像。因此,例如 fooTemplate.png 或 barTemplate.pdf。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多