Попытка превратить [NSImage imageNamed: NSImageNameUser] в NSData

Если я создам 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;
}

(Пытался опубликовать это как свой ответ, но у меня недостаточно репутации?)

8
задан zorn 5 October 2011 в 19:11
поделиться