Speichern einer PNG-Datei von NSImage (Netzhautprobleme)

Ich führe einige Operationen an Bildern durch und möchte das Bild nach Abschluss als PNG auf der Festplatte speichern. Ich mache folgendes:

+ (void)saveImage:(NSImage *)image atPath:(NSString *)path {

    [image lockFocus] ;
    NSBitmapImageRep *imageRepresentation = [[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0.0, 0.0, image.size.width, image.size.height)] ;
    [image unlockFocus] ;

    NSData *data = [imageRepresentation representationUsingType:NSPNGFileType properties:nil];
    [data writeToFile:path atomically:YES];
}

Dieser Code funktioniert, aber das Problem ist, dass beim Drucken des NSBitmapImageRep-Objekts auf dem Retina-Mac eine andere Größe und Pixel korrekt angezeigt werden und das Bild beim Speichern auf der Festplatte doppelt so groß ist:

$0 = 0x0000000100413890 NSBitmapImageRep 0x100413890 Size={300, 300} ColorSpace=sRGB IEC61966-2.1 colorspace BPS=8 BPP=32 Pixels=600x600 Alpha=YES Planar=NO Format=0 CurrentBacking=<CGImageRef: 0x100414830>

Ich habe versucht, die Pixelgröße so zu ändern, dass die Retina-Skala nicht berücksichtigt wird, da ich die ursprüngliche Größe beibehalten möchte:

imageRepresentation.pixelsWide = image.size.width;
imageRepresentation.pixelsHigh = image.size.height;

Dieses Mal erhalte ich die richtige Größe, wenn ich das NSBitmapImageRep-Objekt drucke, aber wenn ich meine Datei speichere, erhalte ich immer noch das gleiche Problem:

$0 = 0x0000000100413890 NSBitmapImageRep 0x100413890 Size={300, 300} ColorSpace=sRGB IEC61966-2.1 colorspace BPS=8 BPP=32 Pixels=300x300 Alpha=YES Planar=NO Format=0 CurrentBacking=<CGImageRef: 0x100414830>

Haben Sie eine Idee, wie Sie dieses Problem beheben und die ursprüngliche Pixelgröße beibehalten können?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage