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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top