如何将Cocoa文件类型图标写为16x16 PNG文件?

时间:2011-03-27 16:57:24

标签: cocoa icons nsimage

如何在Cocoa中为文件类型图标写出16x16 PNG文件?我之前尝试过这个代码,如下面的代码片段。该片段在Mac OS X 10.5的PPC机器上运行,但似乎不再适用于Mac OS X 10.6:写出的PNG大小为512x512,而不是16x16。

NSImage * icon = [[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode(kGenericFolderIcon)];
[icon setSize: NSMakeSize(16.0,16.0)];
NSBitmapImageRep * bitmapRep = [NSBitmapImageRep imageRepWithData: [icon TIFFRepresentation]];  
NSData * data = [bitmapRep representationUsingType: NSPNGFileType properties: nil];
[data writeToFile: @"/tmp/test.png" atomically: NO];

根据我对NSImageNSImageRep上的文档的理解,以上代码之前的工作原理是巧合,因为setSize:仅设置图像的“绘图大小”它不一定与其表示的“物理尺寸”相匹配。

那么获取16x16大小的PNG文件的正确方法是什么?此外,Mac OS X上的图标可以包含16x16大小的特殊绘制版本,其中只是“大”图标的缩小版本;如何确保将这个特殊版本写入PNG文件?

2 个答案:

答案 0 :(得分:2)

Nikolai是对的,你应该先检查图像是否有16x16表示,但只需将图像调整为16 x 16就可以了:

NSImage * icon = [[NSWorkspace sharedWorkspace] iconForFileType: NSFileTypeForHFSTypeCode(kGenericFolderIcon)];
[icon setScalesWhenResized:YES];  //this makes NSImage create a new representation
[icon setSize: NSMakeSize(16.0,16.0)];

答案 1 :(得分:1)

如果你确定NSImage中有一个16x16大小的图标版本,你可以查看表示(-[NSImage representations])并通过查看大小选择你感兴趣的那个(-[NSImageRep pixelsWide] {1}}和pixelsHigh)。然后,您可以将表示写入磁盘。

更好的方法是创建一个16x16位图上下文,将图像绘制到该上下文中,然后保存上下文内容。如果原始图标不包含16x16表示,这种方式也有效。