Halcon - 圖像隨 HWindowControl 控件縮放的同時,保持圖像的長寬比例不變


背景

通常情況下,圖像是填充滿 HWindowControl 控件,並隨其縮放的。此時只需要將 set_part 的參數設置成圖像的大小即可。

不過,有時候,在一些測量任務中,我們對原始圖像的長寬比敏感,此時的圖像顯示最好是能保持圖像的長寬比不變。

正文

如何保證圖像顯示的長寬比例呢?答案是將 HWindowControl 控件的 ImagePart 設置成與自身控件的長寬比一致即可。這里我們假設:

圖像的大小是 imgWidth 和 imgHeight

HWindowControl 控件的窗體大小是 winWidth 和 winHeight

HWindowControl 控件的 ImagePart 大小是 partWidth 和 partHeight

所以,有:

\[\frac{partWidth}{partHeight} = \frac{winWidth}{winHeight} \]

當 winWidth < winHeight 時,我們設定 partWidth = imgWidth ,則:

\[partHeight = \frac{partWidth * winHeight}{winWidth} = \frac{imgWidth * winHeight}{winWidth} \]

當 winWidth > winHeight 時,我們設定 partHeight = imgHeight ,則:

\[partWidth = \frac{partHeight * winWidth}{winHeight} = \frac{imgHeight * winWidth}{winHeight} \]

C# 程序:

private void DispImage(HImage image, HWindow window)
{
    int imgWidth, imgHeight, winRow, winCol, winWidth, winHeight, partWidth, partHeight;
    try
    {
        image.GetImageSize(out imgWidth, out imgHeight);
        window.GetWindowExtents(out winRow, out winCol, out winWidth, out winHeight);
        if (winWidth < winHeight)
        {
            partWidth = imgWidth;
            partHeight = imgWidth * winHeight / winWidth;
        }
        else
        {
            partWidth = imgHeight * winWidth / winHeight;
            partHeight = imgHeight;
        }
        window.SetPart(0, 0, partHeight - 1, partWidth - 1);
        window.DispImage(image);
    }
    catch (HalconException hEx)
    {
        MessageBox.Show(hEx.Message);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM