Какая связь между ScaleTransform и Pixel

Я новичок в понятиях пикселей, точек на дюйм, разрешения и прочего. Итак, позвольте мне задать этот простой вопрос, на который мне трудно получить простой ответ.

  • Какова единица измерения по умолчанию в wpf
  • Когда я применяю преобразование масштаба к кнопке, как она становится больше (что происходит на самом деле)
  • Какова единица коэффициента масштабирования в wpf
  • Как коэффициент масштабирования связан с пикселем (или расположением масштабируемого элемента управления)

person sudarsanyes    schedule 12.11.2010    source источник


Ответы (1)


На самом деле этот предмет довольно сложный.

Единица

В WPF все размеры выражаются в Device Independent Unit (DIU).

1 DIU = 1/96 дюйма. 1 DIU = 1 пиксель на дисплее с разрешением 96 DPI. 1 DIU = 2,083333 пикселя на дисплее с разрешением 200 DPI.

Масштаб и зум

Ты здесь выглядишь растерянным. Масштаб/увеличение 1,0 означает 100%, 2,0 означает 200%, 0,5 означает 50%. Это не единица, это фактор.

person Nicolas Repiquet    schedule 12.11.2010
comment
Да, я в замешательстве. Когда я применяю преобразование масштаба 1,0, это 100% масштабирование, теперь, когда я применяю 2,0, вы говорите, что оно увеличивает элемент управления на 200%. Как масштабируется контроль? Увеличивает ли это его ширину и высоту (нет !!), перемещает ли это элемент управления на экране (не знаю !!!) - но элемент управления, кажется, смещается из своего исходного положения по мере его масштабирования. Сколько DIUs он расширил. Не могли бы вы дать мне больше информации об этом, пожалуйста - person sudarsanyes; 12.11.2010
comment
Нет, ширина и высота остаются нетронутыми. Когда система рендеринга WPF собирается отрисовать ваш элемент управления, она сначала применяет преобразование, а затем отрисовывает его. Итак, если вы поместите масштабное преобразование 2.0 на свой элемент управления, он будет казаться в два раза больше. Что касается расположения, то оно управляется свойствами ScaleTransform.CenterX и CenterY. Взгляните на msdn.microsoft.com/ ru/библиотека/ - person Nicolas Repiquet; 12.11.2010
comment
Таким образом, это означает, что объект перемещается в DIU при масштабировании. Как легко вычислить это местоположение при масштабировании элемента управления - person sudarsanyes; 12.11.2010
comment
Я не понимаю, зачем тебе это нужно... Может, тебе стоит объяснить, что ты действительно хочешь сделать. - person Nicolas Repiquet; 12.11.2010
comment
У меня линейка на месте. Шкала линейки указана в см. Также есть просмотрщик прокрутки под линейкой. У меня есть кнопка внутри прокрутки, и я хочу, чтобы линейка правильно масштабировалась при увеличении кнопки. Все работает нормально, за исключением того, что я не могу синхронизировать шкалу линейки (шкала начинается с 0) с начальным местоположением элемента управления. Надеюсь, вы понимаете сценарий - person sudarsanyes; 15.11.2010