Получите правильную ширину и высоту изображения 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
Ответы
Ответ 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
Вы не можете (читайте, не должны, должны не заботиться) делать сопоставление с пикселями устройства самостоятельно, вот почему яблоко делает это.