NSImage imageNamed: для Mac Mini возвращается маленькая иконка вместо высокого разрешения
-
06-07-2019 - |
Вопрос
При использовании метода imageNamed:
NSImage
для получения значка текущего компьютера, если я работаю на Mac Mini, тогда я получаю низкое разрешение образ. Если я запускаю тот же код с моего MacBook, то получаю значок в высоком разрешении, как и ожидалось.
Мой код выглядит следующим образом:
NSImage *image;
image = [NSImage imageNamed:@"NSComputer"];
[image setSize: NSMakeSize(512,512)];
NSData * tiffData = [image TIFFRepresentation];
NSBitmapImageRep *bitmap = [NSBitmapImageRep imageRepWithData:tiffData];
data = [bitmap representationUsingType:NSPNGFileType properties:nil];
mime = @"image/png";
Когда я запускаю его на своем MacBook, все отлично работает, и я получаю значок 512x512 на моем компьютере. Когда я запускаю его на своем Mac Mini, я получаю значок 32x32, который был увеличен до 512x512.
Есть идеи, как мне получить версию в высоком разрешении?
Решение
Я полагаю, что изображение получено из /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources /
Значок Mac mini называется com.apple.macmini.icns
. Возможно, вы захотите проверить, содержит ли этот файл значок 512x512 на вашем компьютере (на моем компьютере работает Snow Leopard) '
В целях отладки вы также должны отправить выходные данные -representations
в NSLog
, чтобы убедиться, что значок имеет или не имеет версию 512x512.
Изменить.
10.6 Примечаний к выпуску AppKit содержит совсем немного об обновленных отношениях между NSImage и CGImage.
В Snow Leopard вы можете получить изображение с полным разрешением, преобразовав его в CGImageRef:
NSImage* image = [NSImage imageNamed:NSImageNameComputer];
NSRect imageRect = NSMakeRect(0, 0, 512, 512);
CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:nil hints:nil];
Оттуда вы можете создать новый NSImage из CGImageRef или использовать API-интерфейсы CGImageDestination * для написания png-файла.