Если я создам NSImage
с помощью чего-то вроде:
NSImage *icon = [NSImage imageNamed:NSImageNameUser];
, у него будет только одно представление, NSCoreUIImageRep
, который кажется частным классом .
Я хочу заархивировать это изображение как NSData
, но если я попрошу TIFFRepresentation
, я получу маленький значок
, когда настоящий NSImage
Изначально я создавал вид, будто он вектор, и его можно масштабировать, чтобы хорошо заполнить мои изображения.
Я как бы надеялся, что изображения, сделанные таким образом, будут иметь NSPDFImageRep
, который я мог бы использовать.
Есть идеи, как я могу получить NSData
(предпочтительно векторная версия или, что еще хуже, крупномасштабная версия растрового изображения) этого NSImage
?
ОБНОВЛЕНИЕ
Говорил с некоторые люди в Твиттере предположили, что реальным источником этих изображений являются файлы 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;
}
(Пытался опубликовать это как свой ответ, но у меня недостаточно репутации?)