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-файла.

Другие вопросы по тегам