NSImage imageNamed: для Mac Mini возвращается маленькая иконка вместо высокого разрешения
Когда используешь NSImage
"s imageNamed:
способ получить значок текущего компьютера, если я работаю на 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.
Любые идеи о том, как я могу получить версию в высоком разрешении?
1 ответ
Я считаю, что изображение исходит от /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-файла.