Размер изображения в какао, так же, как размер большинства всего остального, измеряется в пунктах. Это идеализированные координаты, которые предполагаются равными 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
- это класс, который представляет растровые изображения.
Поймите, что изображение в сети - это * не * NSImage, а JPG или GIF или PNG или некоторые такие. Когда сетевое изображение загружается в NSImage, оно изменяется/обрезается на основе «метаданных» в исходном файле, а также любых элементов в конструкторе 'imageWith..'. –
Спасибо, у меня была такая же проблема, и это помогло мне! –