错误的NSImage大小?

时间:2014-10-12 18:07:18

标签: objective-c macos

我从互联网上的链接获取图像大小。图像实际尺寸为630x420,但是当我打印图像尺寸时,我得到129x86。 (image.size.width和身高)

当我记录NSImage时,我可以看到像素字段的大小正确,与“大小”字段不同。所以,为什么会这样,我如何获得像素大小?

我知道在UIImage中,尺寸是图像的实际尺寸。

<NSImage 0x600000260fc0 Size={129.59999999999999, 86.399999999999991} Reps=(
    "NSBitmapImageRep 0x6000000b0b00 Size={129.59999999999999, 86.399999999999991} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=630x420 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x600000171c40"

2 个答案:

答案 0 :(得分:6)

Cocoa中的图像大小,就像其他大多数的大小一样,以点数来衡量。这些是理想化的坐标,假设为1/72英寸。

您可能认为图像是以像素为单位测量的,有些是,但它们也可以具有“真实世界”,“物理”尺寸。如果图像的元数据描述其像素与某个真实世界长度单位之间的关系,则图像具有物理尺寸。表达这种关系的常用方法是DPI,每英寸点数。

您从网络获取的图像数据的DPI存储在其元数据中。似乎它的DPI为350.在350 DPI时630像素为1.8英寸。 350 DPI时的420像素为1.2英寸。因此,图像尺寸为1.8英寸x 1.2英寸。

Cocoa然后用点表示。 1.8英寸* 72 DPI = 129.6。 1.2英寸* 72 DPI = 86.4。这些是你从NSImage得到的值,在浮点数代表它们的能力范围内。

可可认为这张图片宽129.6分,高86.4分是正确的。如果没有,那么图像将在屏幕上或在打印时以错误的尺寸绘制,因为它具有DPI。

对于一般情况,您还必须认识到NSImage是图像表示的包装。 NSImage只是“可以吸引自己的东西”,而不是更具体的东西。任何给定图像可能有多个表示。此外,并非所有表示都是位图。一些可能是矢量图形(例如PDF)。其他可能是程序性的,使用代码来绘制自己。 NSBitmapImageRep是表示位图图像的类。

答案 1 :(得分:0)

好的,似乎在NSImage中,尺寸不是实际尺寸,而是相对于屏幕。

获得真实尺寸:

NSImageRep *rep = [[image representations] objectAtIndex:0];
NSSize imageSize = NSMakeSize(rep.pixelsWide, rep.pixelsHigh);