Точките за разбиране и потребителското пространство в Cocoa Drawing, тъй като взаимодействат с разделителната способност на екрана

Размерите на рисуване на какао (ширина и височина) са посочени в точки, които са дефинирани както следва в документацията на Ръководство за рисуване на какао на OS X:

„Една точка е еквивалентна на 1/72 от инча“

От това разбирам, че точка е физическо разстояние. Така че, ако екранът ми е 20 инча широк (например), ще имам 20 x 72 = 1440 точки хоризонтална ширина в точки, с които да работя. С други думи, една точка не зависи от разделителната способност на устройството.

Това не изглежда така...

Просто приложение за какао, използващо ширината на прозореца като тест, показва, че: 1) когато моята разделителна способност е зададена на 1680x1050, ще са необходими ширина от 1680 точки, за да обхване ширината на екрана 2) по подобен начин, ако аз променете моята разделителна способност на 2560x1440 ще отнеме ширина на прозореца от 2560 точки, за да обхване ширината на екрана

Също така объркващо (по противоречив начин) е изявлението, направено в документа на Apple с указания за висока разделителна способност, че:

Всяка точка в потребителското пространство е подкрепена от четири пиксела

Горните тестове изглежда показват, че имам потребителско пространство от 1680x1050, когато резолюцията на дисплея ми е зададена на 1680x1050. Ако има 4 пиксела на потребителска точка, това ще сочи към ефективна „реална“ разделителна способност от 2 пъти (1680x1050) = 3360x2100, което е повече от естествената разделителна способност на моя 13-инчов retina macbook pro от 2560x1600.


person Sam    schedule 18.01.2015    source източник
comment
Мисля, че 72 точки на инч се отнасят най-вече за контекстите на PDF и печат по подразбиране, има малко диапазон по отношение на физическите екрани, помислете за iPad и iPad mini, които по време на изпълнение изглеждат еднакви. Разбирам, че сте маркирали cocoa, а не cocoa-touch, но тук е същото, още повече, че много mac-ове пробутват екрани, които Apple дори не са произвели   -  person Jef    schedule 18.01.2015
comment
@Jef тогава какво е определението за точка?   -  person Sam    schedule 18.01.2015
comment
на практика това е абстрактна единица, която няма фиксирана корелация с пикселите, нито с каквото и да е физическо измерване. това също е нещото, с което кварцът рисува :)   -  person Jef    schedule 18.01.2015
comment
В моите тестове по-горе изглежда, че работеща дефиниция може да бъде: единична единица вертикално или хоризонтално при каквато и разделителна способност да е екранът. Опитвам се да разбера дали това наистина е правилно.   -  person Sam    schedule 18.01.2015
comment
звучи ми добре да. Сигурен съм, че 72 dpi е добра цифра за "топка", но има диапазон, който (на екрани) не е изрична стойност. Но когато пуснат екран със значително повече пиксели от преди, те увеличават „скалата“, за да запазят „точките“ в този диапазон... (вместо да пуснат нов екран с два пъти повече „точки“ за рисуване, което би изобразил много неща в съществуващи приложения (минимален, максимален размер на всеки NSWindow например) под оптимално..   -  person Jef    schedule 18.01.2015


Отговори (1)


Точките са абстрактна, виртуална координатна система. Намерението е обикновено да проектирате и пишете код за рисуване, който да работи в точки и това ще бъде приблизително съвместимо с човешкото зрение, компенсирайки различната физическа плътност на пикселите на дисплея и обичайното разстояние между дисплея и очите на потребителя.

Точките нямат надеждна връзка нито с физическите единици за разстояние (инчове, сантиметри и т.н.), нито с физическите пиксели на дисплея.

За дисплеите на екрана има поне три различни измервания. Например екранът на Retina MacBook Pro има 2880x1800 физически пиксела. В режима по подразбиране това е картографирано на 1440x900 точки, така че всяка точка е квадрат с размери 2x2 пиксела. Ето защо прозорец на такава система има същия визуален размер като същия прозорец на MacBook Pro без Retina с екран с 1440x900 физически пиксела, нанесени на 1440x900 точки. Прозорецът се измерва в точки и така заема същата част от екрана. На Retina дисплея обаче има повече пиксели, позволяващи по-фини детайли.

Възможен е обаче друг слой сложност. Можете да конфигурирате тази система Retina да показва повече съдържание на екрана с цената на част от детайлите. Можете да изберете режим на показване от 1920x1200 точки. В този режим изобразяването се извършва в бекбуфер от 3840x2400 пиксела. Това позволява изобразяване на по-високо ниво на детайлност, но поддържа математиката проста; точките все още се нанасят на квадрати с размери 2x2 пиксела. (Тази проста математика също така избягва проблеми със шевовете при рисуване на допиращи се растерни изображения.) Но 3840x2400 е по-голям от броя на физическите пиксели в хардуера на дисплея. И така, този бекбуфер се намалява, когато действително се изчертава на екрана до физическите 2880x1800 пиксела. Това губи някои от по-високите детайли от задния буфер, но резултатите все още са с по-фини детайли от физически екран 1920x1200 или мащабиране на изобразяване на 1920x1200 до физически екран 2880x1800.

И така, за тази конфигурация:
Размер на екрана в точки: 1920x1200
Backbuffer в пиксели в паметта: 3840x2400
Физически пиксели в хардуер на дисплея: 2880x1800

Разбира се, възможни са и други конфигурации:

Размер на екрана в точки: 2880x1800
Backbuffer в пиксели: 2880x1800
Физически пиксели: 2880x1800
Всичко ще бъде мъничко, но ще можете да поберете много неща (напр. много редове текст) екрана.

Размер на екрана в точки: 1280x800
Backbuffer в пиксели: 2560x1600
Физически пиксели: 2880x1800
Това всъщност ще направи всичко (текст, бутони и т.н.) да изглежда по-голямо, тъй като има по-малко точки, картографирани към същите физически пиксели . Всяка точка ще бъде физически по-голяма. Обърнете внимание обаче, че всяка точка все още се преобразува в квадрат с размери 2x2 пиксела в задния буфер. Както преди, бекбуферът се мащабира от хардуера към физическия дисплей. Този път е леко увеличен, а не намален. (Това мащабиране е същото, което се случва на LCD дисплей без Retina, когато изберете режим с по-малко пиксели от физическия дисплей. Очевидно LCD не може да промени броя на физическите пиксели, които има, така че различната резолюция е постигнато чрез мащабиране на бекбуфер.)

и т.н.

person Ken Thomases    schedule 18.01.2015
comment
първо благодаря за изчерпателния отговор. За да обобщим една важна точка/правило: размерът на екрана в точки винаги ще бъде такъв, какъвто потребителят е задал разделителната способност на екрана си. Въпреки това, тази разделителна способност на екрана взема предвид уравнението на ретината. - person Sam; 19.01.2015