|
#1
|
|||
|
|||
ZooM картинки
Всем привет.
Есть в файрмонкей такой компонент как ImageViewer. У него есть свойство BitmapScale. Суть в том что когда увеличиваешь картинку путем изменения свойства BitmapScale, то стандартно позиция области видимости центрируется. Это несовсем правильно, т.к. если увеличивать картинку предварительно сместив область видимости то получается что картинка будет центроваться не туда куда человек смотрел до увеличения, а тупо к центру всей картинки. Так вот задача переписать обработчик так чтобы центрировалась картинка после увеличения в тот же центр который был до увеличения. Если удалить центрование в стандартном обработчике, то при увеличении картинкисмещение области видимости остается на том же месте а сама картинка растягивается вниз впрао. Возможно я описал проблему немного путано, но как смог. Сначала задача кажется тривиальной и способов решения ее даже несколько, но все они оказываются на практике несостоятельными. Вот один из примеров: Код:
x1 := ( ViewportPosition.X ) + (( (HScrollBar.ViewportSize/oldvalue) - (HScrollBar.ViewportSize/NewValue) )/2); y1 := ( ViewportPosition.Y ) + (( (VScrollBar.ViewportSize/oldvalue) - (VScrollBar.ViewportSize/NewValue) )/2); ViewportPosition - текущее смещение HScrollBar.ViewportSize - ширина области видимости oldvalue - коэффициент увеличения картинки (BitmapScale) до изменения newvalue - коэффициент увеличения картинки (BitmapScale) после изменения |
#2
|
|||
|
|||
Пробовал через центры, тоже неверные результаты.
Вот так находятся центры картинки (проверено, правильно). центр до: Код:
x0 := (ViewportPosition.X / OldValue) + (HScrollBar.ViewportSize / (OldValue*2)); y0 := (ViewportPosition.Y / OldValue) + (VScrollBar.ViewportSize / (OldValue*2)); Код:
x02 := (ViewportPosition.X / NewValue) + (HScrollBar.ViewportSize / (NewValue*2)); y02 := (ViewportPosition.Y / NewValue) + (VScrollBar.ViewportSize / (NewValue*2)); |