【发布时间】:2011-10-05 17:29:40
【问题描述】:
如果我通过以下方式创建NSImage:
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
它只有一种表示形式,NSCoreUIImageRep,它似乎是一个私有类。
我想将此图像存档为NSData,但如果我要求TIFFRepresentation,我会得到一个
当我最初创建的真实 NSImage 似乎是矢量时,小图标会放大以很好地填充我的图像视图。
我有点希望以这种方式制作的图像有一个我可以使用的NSPDFImageRep。
任何想法如何获得这个NSImage 的NSData(首选矢量版本或更糟糕的大型位图版本)?
更新
与on Twitter 的一些人交谈,他们认为这些图像的真正来源是多分辨率 icns 文件(可能根本不是矢量)。我在磁盘上找不到它们的位置,但听听还是很有趣。
此外,他们建议我创建系统 NSImage 并手动将其渲染为我自己的高分辨率 NSImage。我现在正在这样做,它可以满足我的需求。我的代码:
+ (NSImage *)pt_businessDefaultIcon
{
// Draws NSImageNameUser into a rendered bitmap.
// We do this because trying to create an NSData from
// [NSImage imageNamed:NSImageNameUser] directly results in a 32x32 image.
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
NSImage *renderedIcon = [[NSImage alloc] initWithSize:CGSizeMake(PTAdditionsBusinessDefaultIconSize, PTAdditionsBusinessDefaultIconSize)];
[renderedIcon lockFocus];
NSRect inRect = NSMakeRect(0, 0, PTAdditionsBusinessDefaultIconSize, PTAdditionsBusinessDefaultIconSize);
NSRect fromRect = NSMakeRect(0, 0, icon.size.width, icon.size.width);;
[icon drawInRect:inRect fromRect:fromRect operation:NSCompositeCopy fraction:1.0];
[renderedIcon unlockFocus];
return renderedIcon;
}
(试图将此作为我的答案发布,但我没有足够的声誉?)
【问题讨论】:
-
你的问题对我很有用,你的回答很有效。
标签: macos cocoa nsdata nsimage