Jak zapisać plik PNG z NSImage (problemy z siatkówką)

Robię pewne operacje na obrazach i po zakończeniu chcę zapisać obraz jako PNG na dysku. Robię co następuje:

+ (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];
}

Ten kod działa, ale problem tkwi w retina mac, jeśli wydrukuję obiekt NSBitmapImageRep, otrzymam inny rozmiar i piksele rect, a gdy mój obraz zostanie zapisany na dysku, ma dwa razy większy rozmiar:

$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>

Przywiązałem, aby zmusić rozmiar piksela, aby nie dbał o skalę siatkówki, ponieważ chcę zachować oryginalny rozmiar:

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

Tym razem dostaję odpowiedni rozmiar, gdy drukuję obiekt NSBitmapImageRep, ale gdy zapisuję plik, nadal mam ten sam 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>

Masz pomysł, jak to naprawić i zachować oryginalny rozmiar piksela?

questionAnswers(5)

yourAnswerToTheQuestion