NSImage size is wrong

2019-08-13 02:37发布

I think i'm missing something really basic here. If I do this with a legal URL/path which I know exists:

NSImage* img = [[NSImage alloc] initWithContentsOfFile:[[selectedItem url] path]];
NSLog(@"Image width: %d height: %d", [img size].width, [img size].height);

then I get reported to the console that the width is -2080177216 and the height 0. Although I know that the width is actually 50 and the height 50. I tried calling isValid and it returns YES, and I also tried checking the size of the first representation and it returned the same messed up values. How come the image is not loading properly?

3条回答
看我几分像从前
2楼-- · 2019-08-13 02:58

See NSImage size not real size with some pictures?

You need to iterate through NSImageRep and set the size from the largest found.

查看更多
Ridiculous、
3楼-- · 2019-08-13 03:05

The size method returns an NSSize, a struct whose width and height members are of type float. You're treating them as int. Use %f and everything should be fine.

查看更多
唯我独甜
4楼-- · 2019-08-13 03:19

Does this help?

setSize:

Sets the width and height of the image.

- (void)setSize:(NSSize)aSize

Discussion:

The size of an NSImage object must be set before it can be used. If the size of the image hasn’t already been set when an image representation is added, the size is taken from the image representation's data. For EPS images, the size is taken from the image's bounding box. For TIFF images, the size is taken from the ImageLength and ImageWidth attributes.

Changing the size of an NSImage after it has been used effectively resizes the image. Changing the size invalidates all its caches and frees them. When the image is next composited, the selected representation will draw itself in an offscreen window to recreate the cache.

Availability Available in Mac OS X v10.0 and later. See Also

查看更多
登录 后发表回答