NSImage отличается размером в коде, отличном от Finder/Preview.

У меня есть несколько изображений, которые я использую в своем приложении (одно из них прилагается). Странно то, что реальный размер изображения (показанный поиском и предварительным просмотром) составляет 1200x701 пикселей.

Когда я получаю доступ к изображению из кода и по его размеру, я получаю 360x210px. Что здесь происходит?

Код, который я использую, чтобы получить размер изображения:


NSImage *newImg =  [[NSImage alloc] initWithContentsOfURL:
                   [NSURL URLFromPasteboard:[sender draggingPasteboard]]];
float h = [newImg size].height; //height is 210px - should be 701px
float w = [newImg size].width;  //width is 320px - should be 1200px

Содержимое newImg - это то же изображение, которое было указано и загружено - я все равно отображаю его в NSImageView, так что я вижу. Просто размер взят с -size неправильно.

Это изображение:

http://www.tomaszkrasnyk.yoyo.pl/image.jpg

3 ответа

Решение

Я считаю, что -[NSImage size] возвращает размер в точках, а не в пикселях. Вот почему в NSImageRep есть как метод размера, так и методы pxHigh и пиксель Wide. Ваше изображение явно не с разрешением 72 dpi.

NSImageRep *imgRep = [NSImageRep imageRepWithContentsOfFile:imagePath];
int imageWidth = (int)[imgRep pixelsWide];
int imageHeight = (int)[imgRep pixelsHigh];
imgRep = nil;

NSLog(@"original image width: %d",imageWidth);
NSLog(@"original image height: %d",imageHeight);

NSImage может содержать несколько представлений одного и того же изображения, каждое из которых имеет разные размеры. Я бы посмотрел на -representations метод на NSImage, а затем взглянуть на каждый NSImageRep объект возвращается в массив, чтобы увидеть, что все это имеет.

Другие вопросы по тегам