Я работаю над приложением WinRT, которое использует D2D для отображения растрового изображения. Я ищу, чтобы включить мультитач, чтобы иметь возможность панорамирования и масштабирования растрового изображения.Совокупный перевод на Matrix3x2F
Я использую событие OnManipulatedUpdated для обновления кумулятивного преобразования. Я нашел способ найти совокупный масштабный коэффициент, но не могу найти кумулятивный коэффициент перевода (я не хочу, чтобы пользователь мог панорамировать вне размера масштабированного изображения.
Есть ли способ чтобы выяснить, что кумулятивный перевод
Вот мой код:
D2D1::Matrix3x2F m_mxTransform;
property float CurrentScaleFactor
{
float get() { return sqrt(fabs(m_mxTransform.Determinant())); }
}
void OnManipulationUpdated(
_In_ Windows::UI::Input::GestureRecognizer^ recognizer,
_In_ Windows::UI::Input::ManipulationUpdatedEventArgs^ args)
{
Point position = args->Position;
Point positionDelta = args->Delta.Translation;
float currentScale = CurrentScaleFactor;
float preAdjustedScale = args->Delta.Scale;
ManipulationDelta adjustedDelta = LimitManipulationScale(args->Delta, currentScale);
float newScale = currentScale * adjustedDelta.Scale;
//Update the transformation to
D2D1::Matrix3x2F transformDelta;
if (preAdjustedScale == adjustedDelta.Scale)
{
transformDelta =
D2D1::Matrix3x2F::Scale(adjustedDelta.Scale, adjustedDelta.Scale, D2D1::Point2F(args->Position.X, args->Position.Y)) *
D2D1::Matrix3x2F::Translation(args->Delta.Translation.X, args->Delta.Translation.Y);
}
else // don't translate
{
transformDelta =
D2D1::Matrix3x2F::Scale(adjustedDelta.Scale, adjustedDelta.Scale, D2D1::Point2F(args->Position.X, args->Position.Y));
}
m_mxTransform = m_mxTransform * transformDelta;
....
m_d2dContext->SetTransform(m_mxTransform);
}