Objective c 图像大小错误?

Objective c 图像大小错误?,objective-c,macos,Objective C,Macos,我从互联网上的链接获取图像大小。图像的实际大小是630x420,但当我打印图像大小时,我得到129x86。(image.size.width和高度) 当我记录NSImage时,我可以看到有一个大小正确的像素字段,它与“大小”字段不同。那么,为什么会这样,我如何得到像素的大小呢 我知道在UIImage中,大小是图像的实际大小 <NSImage 0x600000260fc0 Size={129.59999999999999, 86.399999999999991} Reps=( "NS

我从互联网上的链接获取图像大小。图像的实际大小是
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"

好的,似乎对于NSImage,大小不是实际大小,而是相对于屏幕的大小

要获得真实尺寸,请执行以下操作:

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

可可中图像的大小,就像其他大多数事物的大小一样,是以点为单位测量的。这些是理想坐标,假设为1/72英寸

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

您从网络获取的图像数据的元数据中存储有一个DPI。似乎它的DPI为350。350 DPI时的630像素为1.8英寸。350 DPI时的420像素为1.2英寸。因此,图像大小为1.8英寸x1.2英寸

Cocoa然后用点来表达这一点。1.8英寸*72 DPI=129.6。1.2英寸*72 DPI=86.4。这些是您从
NSImage
获取的值,在浮点数表示它们的能力范围内

可可认为这幅图像是129.6点宽,86.4点高是正确的。如果没有,那么图像在屏幕上或打印时会绘制错误的大小,因为其DPI


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

请理解,网络上的图像不是NSImage,而是JPG、GIF或PNG等图像。当网络映像加载到NSImage中时,它会根据源文件中的“元数据”以及
imageWith..
构造函数上的任何参数进行调整/裁剪。谢谢,我遇到了同样的问题,这对我很有帮助!这是一个很好的解释,它没有给你任何工具来实际获得图像大小。有时,知识似乎是主要的东西,而不是真正建立和创造新的东西。我想建立一个伟大的创意专辑。为此,我需要一个1行代码来获得图像的大小,就像我使用UIImage一样。你可以写6页关于图像的文档,但老实说,我是在创建、构建,而不是积累关于NS的数据,我对此不感兴趣。非常感谢。您对系统有很好的了解。从文档中可以看出:“在iOS 4.0及更高版本中,此值反映图像的逻辑大小,并以点为单位进行测量。”因此,它与
NSImage
相同。图像的大小为129.6x86.4点。我解释了一个事实,框架给你的答案一开始就是正确的。看起来OP只是想让你给他们代码来解决他们眼前的问题。回答得不错。