【问题标题】:UIImage and NSImage report different image dimensionsUIImage 和 NSImage 报告不同的图像尺寸
【发布时间】:2013-09-26 12:39:21
【问题描述】:

我在 Mac OSX 上有以下代码来加载图像:

NSImage *baseImage = [NSImage imageNamed:[NSString stringWithCString:file.getFilename().c_str() encoding:NSUTF8StringEncoding]];

在 iOS 上使用以下代码加载图片:

UIImage* baseImage = [UIImage imageNamed:[NSString stringWithCString:file.getFilename().c_str() encoding:NSUTF8StringEncoding]];

图片加载后两个平台上的以下行:

printf("Surface: \"%s\" size: %d, %d\n", file.getFilename().c_str(), (int)[baseImage size].width, (int)[baseImage size].height);

如果有问题的图像是 72 DPI,那么在两个平台上,我都会得到以下输出:

Surface: "player.png" size: 30, 30 (Mac)
Surface: "player.png" size: 30, 30 (iOS)

但是,如果图像是 96 DPI,那么我会得到不同的结果:

Surface: "player.png" size: 30, 30 (Mac)
Surface: "player.png" size: 40, 40 (iOS)

虽然 Mac 缩放图像以匹配 72 DPI 而 iOS 不缩放它是一种奇怪的行为,但我希望跨平台获得一致的结果。 (最好缩小到 72 DPI。)

tl;dr:在 iOS 上,如何检测图像的 DPI 并进行相应的缩放?

【问题讨论】:

    标签: ios macos uiimage dpi nsimage


    【解决方案1】:

    一个 NSImage 实例实际上可以包含多个图像的表示(它们是 NSImageRep 的实例),并且可能有不同的大小。您应该将“尺寸”理解为绘图单位点的尺寸,而不是像素尺寸。

    如果您想要像素尺寸,请使用 -bestRepresentationForRect:context:hints: 获取您感兴趣的大小的 NSImageRep,然后调用 -pixelsHigh 和 -pixelsWide。

    PNG 格式可能包含描述图像实际大小的字段,看起来 NSImage 尊重这一点,而 UIImage 可能不是。

    您可以使用“sips”命令行工具检查您的图像文件(png)(输入“man sips”了解更多信息)。它具有读取和处理各种图像格式的像素尺寸和 DPI 的选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      相关资源
      最近更新 更多