我正在尝试绘制并保存一个简单的图像,但它最终在 MBP RD 设备上保存的大小是原来的两倍:
NSImage* image = [[NSImage alloc] initWithSize:size];
[image lockFocus];
[[NSColor blueColor] set];
NSRectFill(CGRectMake(0, 0, 100, 100));
[image unlockFocus];
// ... then save the image
// Cache the reduced image
NSData *imageData = [self TIFFRepresentation];
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData];
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:1.0] forKey:NSImageCompressionFactor];
imageData = [imageRep representationUsingType:NSPNGFileType properties:imageProps];
[imageData writeToFile:fileName atomically:NO];
// image is saved as 200 x 200 :(
我希望尺寸一致,因此在所有设备上均为 100x100
最佳答案
为什么您希望所有设备上的像素大小保持一致?如果保持
在引入 Retina 显示屏时,Apple 重新定义了一些更高级别的 API,以点为单位获取尺寸;而其他较低级别的则以像素为单位进行操作。如果您的应用程序使用文本、控件、矢量图形等,那么它很可能无需更改即可在 Retina 显示屏上运行。如果您使用位图图形,它也可能有效,但您的图像可能有点模糊(因为 OS X 制造了 Retina 分辨率所需的额外像素)。
就您而言,您发现 100 x 100 已被视为积分。我无法想象您的应用程序只包含这一张图像,因此,如果您希望在像素级别进行操作,那么毫无疑问,您会在其他地方受到影响。你需要做的是通读Apple的文档,High Resolution Guidelines for OS X是一个很好的起点。在那里你会看到有一个“转换坐标”部分可能特别适用,但从头开始;-)
HTH
关于cocoa - NSRectFill 在视网膜 MBP 上绘制两倍大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17119384/