Domanda

Quando uso il metodo NSImage imageNamed: per ottenere l'icona per il computer corrente, se sto usando un Mac Mini, allora ottengo una bassa risoluzione Immagine. Se eseguo lo stesso codice dal mio MacBook, ricevo un'icona ad alta risoluzione come mi aspetterei.

Il mio codice è il seguente:

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 lo eseguo sul mio MacBook, tutto funziona alla grande e ottengo un'icona 512x512 del mio computer. Quando lo eseguo sul mio Mac Mini, ottengo un'icona 32x32 che è stata ingrandita a 512x512.

Qualche idea su come posso ottenere la versione ad alta risoluzione?

È stato utile?

Soluzione

Credo che l'immagine provenga da /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/

L'icona di Mac mini è denominata com.apple.macmini.icns . Potresti voler controllare se quel file contiene un'icona 512x512 sul tuo computer (lo fa sul mio, con Snow Leopard) '

Ai fini del debug, è inoltre necessario inviare l'output di -representations a NSLog per verificare che l'icona disponga o meno di una versione 512x512.

Modifica:

Le 10.6 Note sulla versione di AppKit ha un bel po ' sulla relazione aggiornata tra NSImage e CGImage.

Su Snow Leopard, puoi ottenere l'immagine a piena risoluzione convertendola in CGImageRef:

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

Da lì, puoi creare un nuovo NSImage da CGImageRef o utilizzare le API CGImageDestination * per scrivere un file png.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top