ディープズームのマルチスケール画像で固定ズームを実行する方法はありますか? つまり、ポイント X、Y を中心に 2 倍にズームするには 1 回クリックし、元の位置とズーム レベルに戻すにはもう一度クリックしますか?
ズームインとズームアウトするコードを書きましたが、ズームプロセスの途中で zoomaboutlogicalpoint を呼び出すと、ズームアウトしすぎてしまいます (マウスアップイベントの 1/2 の要因によるものだと思います - ズームレベルを取得できますか?)。また、ズームアウトした画像を中央に配置したいと思います(ポイントを変更して画像の途中にズームすると思いますが、これはうまくいかないようです。おそらくViewPortの位置を考慮する必要がありますか?)
例えば
private void msi_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
Point p = e.GetPosition(msi); ズーム (2、p); }
private void msi_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
Point p = e.GetPosition(msi); ズーム(1/2, p); }
public void Zoom(double zoom, Point pointToZoom)
{
bool zoomingIn = zoom > 1;
bool zoomingOut = zoom < 1;
double minViewportWidth = 0.05;
double maxViewportWidth = 1;
if (msi.ViewportWidth < minViewportWidth && zoomingIn)
{
return;
}
if (msi.ViewportWidth > maxViewportWidth && zoomingOut)
{
return;
}
Point logicalPoint = this.msi.ElementToLogicalPoint(pointToZoom);
this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);
}
ありがとう。