我正在對圖像進行一些操作,完成後我想將圖像保存爲PNG磁盤。我做了以下內容:如何從NSImage保存PNG文件(視網膜問題)
+ (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];
}
此代碼工作,但問題是視網膜MAC,如果我打印NSBitmapImageRep對象,我得到不同的尺寸和像素正確,而且當我的圖像保存在磁盤上,它的兩倍大小:
$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>
我綁迫使像素大小不照顧約視網膜規模,我想保留原來的大小:
imageRepresentation.pixelsWide = image.size.width;
imageRepresentation.pixelsHigh = image.size.height;
這一次我得到的合適的大小,當我打印NSBitmapImageRep對象,但是當我救我的文件,我仍然得到同樣的問題:
$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>
任何想法如何解決這一問題,並保留原始像素大小?
' - [NSBitmapImageRep setSize:]'似乎從10.10開始纔可用。也許這就是爲什麼當我在Mavericks上試用你的代碼時,圖像不會被調整大小?雖然沒有任何例外情況發生......無論我傳遞的尺寸是多少,我都會得到與原始尺寸相同的圖像。 –
@NicolasMiari我看到'newRep'的大小改變爲應該的值(以10.9爲目標,但在10.10上運行),但寫入磁盤的文件仍包含一個2x圖像。你有沒有想出一個解決方案? – Dov
是的,Weichsel的答案在下面爲我工作。 –