如何在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文件中?
最佳答案
如果您确定NSImage中存在图标的16x16尺寸版本,则可以浏览表示形式(-[NSImage representations]
),然后通过查看尺寸(-[NSImageRep pixelsWide]
和)。然后,您可以将表示形式写入磁盘。
更好的方法是创建一个16x16位图上下文,将图像绘制到该上下文中,然后保存上下文内容。如果原始图标不包含16x16表示形式,则这种方法也适用。