3 Stimmen

NSImage imageNamed: für Mac Mini liefert ein kleines Symbol statt einer hohen Auflösung

Bei der Verwendung von NSImage 's imageNamed: Methode, um das Symbol für den aktuellen Computer zu erhalten, wenn ich auf einem Mac Mini arbeite, erhalte ich ein Bild mit niedriger Auflösung. Wenn ich denselben Code von meinem MacBook aus ausführe, erhalte ich ein hochauflösendes Symbol, wie ich es erwarten würde.

Mein Code lautet wie folgt:

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

Wenn ich das auf meinem MacBook ausführe, funktioniert alles wunderbar und ich erhalte ein 512x512-Symbol meines Computers. Wenn ich es auf meinem Mac Mini ausführe, erhalte ich ein 32x32-Symbol, das auf 512x512 hochskaliert wurde.

Gibt es eine Idee, wie ich die hochauflösende Version bekommen kann?

3voto

Darren Punkte 25326

Ich glaube, dieses Bild stammt von /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/

Das Mac mini-Symbol heißt com.apple.macmini.icns . Sie sollten überprüfen, ob diese Datei auf Ihrem Rechner ein 512x512-Symbol enthält (auf meinem Rechner mit Snow Leopard ist das der Fall).

Zu Debugging-Zwecken sollten Sie auch die Ausgabe von -representations a NSLog um zu überprüfen, ob das Symbol eine 512x512-Version hat oder nicht.

Edit :

El 10.6 AppKit Versionshinweise enthält eine ganze Reihe von Informationen über die aktualisierte Beziehung zwischen NSImage und CGImage.

Unter Snow Leopard können Sie das Bild in voller Auflösung erhalten, indem Sie es in eine CGImageRef konvertieren:

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

Von dort aus können Sie ein neues NSImage aus der CGImageRef erstellen oder die CGImageDestination* APIs verwenden, um eine png-Datei zu schreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X