Nsimage imagenamed: para Mac mini retorna pequeno ícone em vez de alta resolução
-
06-07-2019 - |
Pergunta
Ao usar NSImage
's imageNamed:
Método para obter o ícone para o computador atual, se eu estiver executando em um Mac mini, obtenho uma imagem de baixa resolução. Se eu executar o mesmo código do meu MacBook, recebo um ícone de alta resolução como eu esperaria.
Meu código é o seguinte:
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";
Quando eu corro isso no meu MacBook, tudo funciona muito bem e recebo um ícone de 512x512 do meu computador. Quando o executo no meu Mac Mini, recebo um ícone de 32x32 que foi escalado para 512x512.
Alguma idéia de como posso obter a versão de alta resolução?
Solução
Eu acredito que a imagem vem de /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/
O ícone Mac mini é nomeado com.apple.macmini.icns
. Você pode verificar se esse arquivo contém um ícone de 512x512 em sua máquina (ele faz na minha, executando o leopardo da neve) '
Para fins de depuração, você também deve enviar a saída de -representations
para NSLog
Para verificar se o ícone possui ou não uma versão 512x512.
Editar:
o 10.6 Notas de lançamento do Appkit Tem um pouco de relação atualizada entre o NSIMAGE e o CGIMAGE.
No Snow Leopard, você pode obter a imagem completa da resolução convertendo em um CGIMAGEREF:
NSImage* image = [NSImage imageNamed:NSImageNameComputer];
NSRect imageRect = NSMakeRect(0, 0, 512, 512);
CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:nil hints:nil];
A partir daí, você pode criar um novo nsimage a partir do CGIMAGEREF ou usar as APIs CGIMAGESTINACION* para gravar um arquivo PNG.