Frage

Wenn NSImage des imageNamed: Methode über das Symbol für den aktuellen Computer zu bekommen, wenn ich auf einem Mac Mini renne, dann bekomme ich ein Bild mit niedriger Auflösung. Wenn ich den gleichen Code von meinem MacBook laufen, dann bekomme ich ein hochauflösendes Symbol wie ich erwarten würde.

Mein Code ist 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 laufen, alles funktioniert gut und ich bekomme eine 512x512 Symbol des meinem Computer. Wenn ich es auf meinem Mac Mini laufen, ich einen 32x32 icon erhalten, die zu 512x512 upscaled worden ist.

Alle Ideen, wie ich die hochauflösende Version bekommen?

War es hilfreich?

Lösung

Ich glaube, dass Bild von /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/ kommt

Der Mac mini Symbol com.apple.macmini.icns genannt. Möglicherweise möchten Sie überprüfen, ob die Datei eine 512x512-Symbol auf Ihrem Gerät enthält (es tut auf meine, mit Snow Leopard) "

Zwecke Für das Debuggen, sollten Sie auch die Ausgabe von -representations senden NSLog, um zu überprüfen, dass das Symbol tut oder nicht über eine 512x512-Version.

Edit:

Die 10,6 AppKit Release Notes ein bisschen recht hat auf der aktualisierten Beziehung zwischen NSImage und CGImage.

Auf Snow Leopard, können Sie das Bild mit voller Auflösung erhalten, indem auf einen CGImageRef Umwandlung:

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

Von dort können Sie eine neue NSImage aus dem CGImageRef erstellen, oder verwenden Sie die CGImageDestination * APIs eine PNG-Datei zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top