0

我正在尝试绘制并保存一个简单的图像,但它最终在 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

4

1 回答 1

1

为什么要在所有设备上保持一致的像素大小?如果保持像素相同,则在 Retina 显示器上查看的尺寸会变小。如果您保持相同,则在任一显示器上查看的大小将相同,但基础像素数将增加四倍。根据应用程序,任何一个选择都可能是有效的。

在引入 Retina 显示屏时,Apple 重新定义了一些更高级别的 API,以采用磅值表示大小;而其他较低级别的以像素为单位。如果您的应用程序使用文本、控件、矢量图形等。它很有可能在 Retina 显示器上无需更改即可工作。如果您使用位图图形,它也可以工作,但您的图像可能有点模糊(因为 OS X 制造了 Retina 分辨率所需的额外像素)。

在您的情况下,您发现您的 100 x 100 已被视为积分。我无法想象您的应用程序只包含这一个图像,因此如果您希望在像素级别进行操作,那么毫无疑问,您会在其他地方被这个问题所困扰。您需要做的是阅读 Apple 的文档,OS X 的高分辨率指南是一个很好的起点。在那里你会看到有一个“转换坐标”部分可能特别适用,但从头开始;-)

高温高压

于 2013-06-15T18:44:59.807 回答