Tôi đang thực hiện một số thao tác trên ảnh và sau khi hoàn tất, tôi muốn lưu ảnh thành PNG trên đĩa. Tôi đang làm như sau:Cách lưu tập tin PNG từ NSImage (các vấn đề về võng mạc)
+ (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];
}
Mã này đang làm việc, nhưng vấn đề là với mac võng mạc, nếu tôi in các đối tượng NSBitmapImageRep tôi nhận được một kích thước và điểm ảnh khác nhau rect và khi hình ảnh của tôi được lưu trên đĩa, đó là gấp đôi kích thước:
$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>
tôi trói buộc kích thước pixel để không chăm sóc về quy mô võng mạc, như tôi muốn giữ kích thước ban đầu:
imageRepresentation.pixelsWide = image.size.width;
imageRepresentation.pixelsHigh = image.size.height;
lần này tôi nhận được kích thước phù hợp khi tôi in các đối tượng NSBitmapImageRep, nhưng khi tôi lưu tập tin của tôi, tôi vẫn nhận được cùng một vấn đề:
$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>
Bất kỳ ý tưởng làm thế nào để khắc phục điều này, và duy trì kích thước điểm ảnh gốc?
'- [NSBitmapImageRep setSize:]' dường như chỉ có sẵn từ 10.10. Có lẽ đó là lý do tại sao khi tôi thử mã của bạn trên Mavericks, hình ảnh không bị thu nhỏ lại? Mặc dù không có ngoại lệ được ném ... Tôi nhận được một hình ảnh có cùng kích thước với bản gốc, dù tôi có vượt qua cỡ nào. –
@NicolasMiari Tôi thấy kích thước của 'newRep' thay đổi thành giá trị của nó (nhắm mục tiêu 10.9, nhưng chạy trên 10.10), nhưng tệp được ghi vào đĩa vẫn chứa một hình ảnh 2x. Bạn đã bao giờ nghĩ ra một giải pháp chưa? – Dov
Vâng, câu trả lời của Weichsel bên dưới đã có tác dụng đối với tôi. –