ユーザーが画像をアップロードし、特定の場所(現在のマウスポインター)で画像を拡大および縮小できるアプリケーションを作成しています。
また、ユーザーは画像をドラッグして、画像がズームされているときに画像の他の部分を表示できる必要があります。
それを実現するためにいくつかの機能を実装しましたが、イメージ全体をスケーリングしています。画像の特定の部分を拡大縮小する方法、または画像全体を拡大縮小してから、現在のマウス ポインターが配置されている場所をポイントする方法を知りたいです。
コード:
private void DisplayIsdDiagram(BO.IsdDiagram IsdDiagram)
{
DoubleBuffered = true;
zoomFac = 1;
translateX = 0;
translateY = 0;
transStartX = 0f;
transStartY = 0f;
picIsdDiagram.BorderStyle = BorderStyle.Fixed3D;
bmp = new Bitmap(Image.FromStream(new MemoryStream(IsdDiagram.Image.ToArray())));
if (bmp.Width > bmp.Height)
{
ratio = (float)picIsdDiagram.Width / (float)bmp.Width;
translateRatio = (float)bmp.Width / (float)picIsdDiagram.Width;
}
else
{
ratio = (float)picIsdDiagram.Height / (float)bmp.Height;
translateRatio = (float)bmp.Height / (float)picIsdDiagram.Height;
}
//picIsdDiagram.Image = bmp;
picIsdDiagram.Refresh();
picIsdDiagram.MouseWheel += new MouseEventHandler(picIsdDiagram_MouseWheel);
}
private void picIsdDiagram_MouseWheel(object sender, MouseEventArgs e)
{
IsZooming = true;
if (e.Delta < 0)
{
if (zoomFac > 1)
zoomFac = zoomFac - (float)0.1;
}
else
{
if (zoomFac <= 5)
zoomFac = zoomFac + (float)0.1;
}
picIsdDiagram.Refresh();
IsZooming = false;
}
private void picIsdDiagram_MouseDown(object sender, MouseEventArgs e)
{
IsZooming = false;
IsMouseDown = true;
transStartX = e.X;
transStartY = e.Y;
}
private void picIsdDiagram_MouseUp(object sender, MouseEventArgs e)
{
IsZooming = false;
IsMouseDown = false;
translateX = translateX + ((e.X - transStartX) * (translateRatio / zoomFac));
translateY = translateY + ((e.Y - transStartY) * (translateRatio / zoomFac));
picIsdDiagram.Refresh();
}
private void picIsdDiagram_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.ScaleTransform(ratio * zoomFac, ratio * zoomFac);
if (IsZooming == false && IsMouseDown == true)
g.TranslateTransform(translateX, translateY);
g.DrawImage(bmp, 0, 0);
}
MouseHover イベントから現在のマウス位置を取得しようとし、ズームのみが完了したときに画像を翻訳しようとしましたが、うまくいきません。
また、Picture Box には他の複数の Picture ボックスが含まれており、大きな画像で何らかの表現を表示できます。大きな画像をスケーリングする際、小さな画像 (画像内) はスケーリングしないでください。大きな画像をズームした後でも、実際の場所でそれらを表示するには、位置を再計算する必要があります。
上記のように、私は2つの問題に直面しています:
1) スクロールして特定の場所 (現在のマウス ポインター) で画像をズームするには。
2) ズームおよび移動中にサブ画像の座標を再生成する。
私を正しい方向に導くことができる助け。
また、他の手段があれば、この機能を実現できます。
アプリケーション: Windows
コントロール:ピクチャーボックス
言語 : C#
応答を待っています!