Q: Google マップでのズームのような、ピクチャ ボックス上の現在のマウス位置でのズームを実装するにはどうすればよいですか?
私は論文の仕事として、単純な GIS / マップ エンジンを設計しています。このアプリケーションは、わずかに変更されたタブ コントロールのタブにマップが読み込まれるように設計されています。
マップは標準の JPEG または PNG 形式のデジタル画像であり、それらのほとんどは非常に高い解像度 (2000x2000px 以上) です。
これらは、タブページのサブコントロールとして追加されるピクチャ ボックスに読み込まれます。画像/画像ボックスの中心にのみズームするボタンクリックイベントとして、単純なズーム方法を実装しました。
私がやりたいのは、ピクチャボックス内の現在のマウス位置で画像がズームされるように、マウスホイールイベントでズームを実装することです。
現在、ズームインのコードは次のようになっています。
timesZoomed += 1;
zoomRatio += 0.1f;
pbxMapa.Width = pbxMapa.Width * zoomRatio;
pbxMapa.Height = pbxMapa.Height * zoomRatio;
pbxMapa.Location = new Point((this.Width / 2) - (pbxMapa.Width / 2), this.Height / 2) - (pbxMapa.Height / 2));
- デフォルトの「zoomRatio」値は 1 で、0.6f まで増加しています。
- 引数「timesZoomed」のデフォルト値は 0 で、最大 6 です。
- 「pbxMapa」は、マップの画像が読み込まれたピクチャボックスです。ピクチャボックスの「ImageSizeMode」プロップは「ズーム」に設定されていますが、ピクチャボックスのサイズはロードされた地図画像のフルサイズに設定されています。
また、この単純なズームコードを試していました。計算はある程度効果的ですが、より大きな比率でズーム/乗算すると、かなりのオフセットがあります。
pbxMapa.Location = new Point(pbxMapa.Location.X + (int)((pbxMapa.Location.X * zoomRatio - mouseXPbx) / 8), pbxMapa.Location.Y + (int)((pbxMapa.Location.Y * zoomRatio - mouseYPbx) / 8));
- 「mouseXPbx」および「mouseYPbx」変数は、「pbxMapa」内の現在のマウス位置を表します。位置決めのオフセットを最小限にするために8で割った。
事前に感謝します。