Подтвердить что ты не робот

Получите правильную ширину и высоту изображения NSImage

Я использую код ниже, чтобы получить ширину и высоту NSImage:

NSImage *image = [[[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:s]] autorelease];
imageWidth=[image size].width;
imageHeight=[image size].height;
NSLog(@"%f:%f",imageWidth,imageHeight);

Но когда-то imageWidth, imageHeight не вернет правильное значение. Например, когда я читаю изображение, информация EXIF ​​отображает:

PixelXDimension = 2272;
PixelYDimension = 1704;

Но imageWidth, изображенияHeight выходы

521:390 
4b9b3361

Ответ 1

Метод размера NSImage возвращает информацию о размере, которая зависит от разрешения экрана. Чтобы получить размер, представленный в фактическом изображении файла, вам нужно использовать NSImageRep.

Обратитесь к nsimage-size-not-real-size-with-some-pictures и получите помощь

Ответ 2

Размеры вашего изображения в пикселях сохраняются в NSImageRep вашего изображения. Если ваш файл содержит только одно изображение, он будет выглядеть следующим образом:

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

где изображение - ваш NSImage и imageSize - это ваш размер изображения в пикселях.

Ответ 3

прямой API дает также правильные результаты

CGImageRef cgImage = [oldImage CGImageForProposedRect:nil context:context hints:nil];
size_t width = CGImageGetWidth(cgImage);
size_t height = CGImageGetHeight(cgImage);

Ответ 4

Apple использует точечную систему на основе DPI для сопоставления точек с пикселями физического устройства. Не имеет значения, что говорит EXIF, важно, сколько логических экранных точек вашего холста должно отображать изображение.

iOS и OSX выполняют это сопоставление для вас. Единственный размер, о котором вы должны беспокоиться, - это размер, возвращенный из UIImage.size

Вы не можете (читайте, не должны, должны не заботиться) делать сопоставление с пикселями устройства самостоятельно, вот почему яблоко делает это.