如何在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];
根据我对NSImage
和NSImageRep
上的文档的理解,以上代码之前的工作原理是巧合,因为setSize:
仅设置图像的“绘图大小”它不一定与其表示的“物理尺寸”相匹配。
那么获取16x16大小的PNG文件的正确方法是什么?此外,Mac OS X上的图标可以包含16x16大小的特殊绘制版本,其中不只是“大”图标的缩小版本;如何确保将这个特殊版本写入PNG文件?
答案 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表示,这种方式也有效。