簡體   English   中英

放大圖片框中的圖像

[英]Zoom Image in Picture Box

我正在創建一個應用程序,用戶可以在其中上傳圖像,然后放大和縮小特定位置(當前鼠標指針)上的圖像。

此外,用戶應該能夠在圖像縮放時拖動圖像以查看圖像的其他部分。

我已經實現了一些功能來實現它,但我正在擴展整個圖像。 我想知道如何縮放圖像的特定部分,或縮放整個圖像,然后指向放置當前鼠標指針的位置。

碼:

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中還有一些其他多個圖片框,用於在大圖像上顯示一些圖像。 縮放大圖像時,不應縮放小圖像(內部圖像)。 雖然需要重新計算位置,即使在放大大圖像后也可以在真實位置顯示它們。

所以在上面我面臨兩個問題:

1)通過滾動在任何特定位置(當前鼠標指針)縮放圖像。

2)在縮放和平移時重新生成子圖像的坐標。

任何可以指導我正確方向的幫助。

此外,如果通過任何其他方式,我可以實現此功能。

應用:Windows

控制:圖片框(如果不能使用,請建議是否可以使用任何其他控件)

語言:C#

等待答復!

由DevExpress 13.2提供的PictureEdit控件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM