2014-10-12 2 views
-1

Я получаю размер изображения по ссылке в Интернете. фактический размер изображения 630x420, но когда я печатаю размер изображения, я получаю 129x86. (image.size.width и высота)Неправильный размер NSImage?

Когда я регистрирую 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" 
+1

Поймите, что изображение в сети - это * не * NSImage, а JPG или GIF или PNG или некоторые такие. Когда сетевое изображение загружается в NSImage, оно изменяется/обрезается на основе «метаданных» в исходном файле, а также любых элементов в конструкторе 'imageWith..'. –

+0

Спасибо, у меня была такая же проблема, и это помогло мне! –

ответ

-1

Хорошо, кажется, что с NSImage размер не является фактическим, а относительно экрана.

Чтобы получить реальный размер:

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

Размер изображения в какао, так же, как размер большинства всего остального, измеряется в пунктах. Это идеализированные координаты, которые предполагаются равными 1/72 дюйма дюйма.

Вы можете думать, что изображения измеряются в пикселях, а некоторые из них, но они также могут иметь «реальный мир», «физические» размеры. Изображение имеет физические размеры, если его метаданные описывают связь между его пикселями и некоторой единицей реального мира. Общим способом выражения этих отношений является DPI, точек на дюйм.

Данные изображения, полученные из сети, имеют DPI, хранящийся в его метаданных. Похоже, что он имеет DPI 350. 630 пикселей при 350 DPI составляет 1,8 дюйма. 420 пикселей при 350 DPI составляет 1,2 дюйма. Таким образом, изображение размером 1,8 дюйма х 1,2 дюйма.

Какао затем выражает это в точках. 1,8 дюйма * 72 DPI = 129,6. 1,2 дюйма * 72 DPI = 86,4. Таковы значения, которые вы получаете от NSImage, в пределах возможностей чисел с плавающей запятой для их представления.

Какао верно, если вы считаете это изображение целым 129,6 баллов и 86,4 баллов. Если это не так, тогда изображение будет рисовать не по правилу на экране или при печати, учитывая его DPI.

Для общего случая вы также должны признать, что NSImage является оберткой изображений изображений. NSImage - это просто «вещь, которая может нарисовать себя», а не что-то более конкретное. Для любого изображения может быть несколько представлений. Кроме того, не все представления являются растровыми изображениями. Некоторые могут быть векторной графикой (например, PDF). Другие могут быть процедурными, используя код, чтобы нарисовать себя. NSBitmapImageRep - это класс, который представляет растровые изображения.

+1

Это отличное объяснение, которое не дает вам никакого инструмента для получения размера изображения. Иногда кажется, что знание - это главное, а не на самом деле строить и создавать новые вещи. Я хотел бы создать отличный творческий альбом. и для этого мне нужен код из 1 строки, чтобы получить размер изображения, например, с UIImage. Вы можете написать 6 страниц документации об изображении, но, честно говоря, я имею дело с созданием, построением, а не с накоплением данных о NS, которые меня не интересуют. Спасибо. У вас есть отличные знания о системе. – Curnelious

+0

Из ['- [UIImage size]'] (https://developer.apple.com/library/ios/documentation/uikit/reference/uiimage_class/index.html#//apple_ref/occ/instp/UIImage/size) docs: «В iOS 4.0 и выше, это значение отражает логический размер изображения и измеряется в точках ». Таким образом, это то же самое, что и для« NSImage ». Размер изображения ** составляет ** 129,6x86,4 балла. объясняя тот факт, что ответ, который предоставил вам каркас, был правильным ответом. –

+1

Похоже, что OP просто хочет, чтобы вы дали им код, чтобы исправить их непосредственную проблему. – CrimsonChris

Смежные вопросы