NSImage imageNamed: для Mac Mini возвращается маленькая иконка вместо высокого разрешения - PullRequest
3 голосов
/ 27 октября 2009

При использовании метода NSImage 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 Ответ

3 голосов
/ 27 октября 2009

Я считаю, что изображение исходит от /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.

...