我从互联网上的链接获取图像大小。图像实际尺寸为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"
答案 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);