Pregunta

Cuando uso el método NSImage imageNamed: para obtener el icono de la computadora actual, si estoy ejecutando en una Mac Mini, obtengo una resolución baja imagen. Si ejecuto el mismo código desde mi MacBook, aparece un ícono de alta resolución como era de esperar.

Mi código es el siguiente:

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";

Cuando ejecuto eso en mi MacBook, todo funciona muy bien y obtengo un icono de 512x512 de mi computadora. Cuando lo ejecuto en mi Mac Mini, aparece un icono de 32x32 que se ha ampliado a 512x512.

¿Alguna idea sobre cómo puedo obtener la versión de alta resolución?

¿Fue útil?

Solución

Creo que la imagen proviene de /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/

El icono de Mac mini se llama com.apple.macmini.icns . Es posible que desee verificar si ese archivo contiene un icono de 512x512 en su máquina (lo tiene en el mío, ejecutando Snow Leopard) '

Para fines de depuración, también debe enviar la salida de -representations a NSLog para verificar que el icono tenga o no una versión de 512x512.

Editar:

El 10.6 Notas de lanzamiento del AppKit tiene bastante sobre la relación actualizada entre NSImage y CGImage.

En Snow Leopard, puede obtener la imagen de resolución completa mediante la conversión a CGImageRef:

NSImage* image = [NSImage imageNamed:NSImageNameComputer];
NSRect imageRect = NSMakeRect(0, 0, 512, 512);
CGImageRef cgImage = [image CGImageForProposedRect:&imageRect context:nil hints:nil];

A partir de ahí, puede crear una nueva NSImage desde CGImageRef, o usar las API CGImageDestination * para escribir un archivo png.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top