HWindowControl控件初步使用
最近在學習新的視覺處理工具–Halcon軟件包,本人學習的主要是HDevelop、Halcon與C#混編以及Halcon與C++混編。這里再多綴一句:11版本后C++編程,包含的是halconcpp文件夾,10版本前包含的是cpp文件夾,我主要學習的是11版本以后的C++編程。
此篇文章是為了記錄學習過程中的一些知識點而已,當然后續的文章也都是如此。好了,廢話不多說了,直奔主題吧。在WinForm中使用HWindowControl控件顯示圖片時,大伙最關心的應該就是圖像能否完全顯示出來的問題。下面將介紹下我學習過程中的收獲,最后會附上程序源碼。
HWindowControl控件和控件中的顯示區域認識
HWindowControl是顯示控件,但關系到顯示圖像部分的是此控件的“子窗口”HWindowControl.HalconWindow。下面我將用“控件”和“顯示區域”來分別代稱上述二位。
其實,可以將“控件”和“顯示區域”兩者分開來看。“控件”是控件,“顯示區域”是顯示區域,兩者相互獨立,互不干擾。為什么這樣說,因為這樣非常有助於理解以下兩個概念:“控件”的大小和“顯示區域”的大小。另,可以將“顯示區域”理解成控件中的黑色區域。
下面我將直接用實例說明。
HWindowControl的實例應用
首先,看下圖的紅色標記區域:
注意圖中的紅色標記處,兩處都是關於大小的屬性。標記1處的屬性是ImagePart,這個其實是“顯示區域”的大小(默認的好像是640×480,這里我也沒去修改它,因為我程序就是來說明這點的),代碼里也需要使用“顯示區域”去設置,“控件”自身不能設置。標記2處有兩個屬性,這兩個屬性的值是一起變化的(相同的),用來表示“控件”的大小。這里我設置的是512×512,因為我程序是來顯示經典的lena照片,其大小正是512×512。
以上部分是為了給大家一個直觀印象,下面就直接進入程序介紹。下圖是程序界面。
程序中共兩個Button,標記1處的Button(OpenImage)的功能是打開圖像並顯示圖像,標記3處的Button(SetImagePart)的功能是修改“顯示區域大小”並顯示圖像。標記2處是用來設置“顯示區域”的Width和Height。對了,初次打開軟件時,標記2處顯示的是當前HWindowControl中顯示區域的Width和Height。此處顯示的是640×480,和我剛才控件屬性(ImagePart)那邊一致。此時,SetImagePart也處於禁用狀態,因為還沒有圖像傳進來啦。
單擊標記1處Button(OpenImage),效果如下圖所示。
成功打開圖像后,SetImagePart按鈕生效。下面我們就來修改顯示區域。首先將“顯示區域”設置成lena圖像的實際大小512×512,然后單擊SetImagepart按鈕。效果如下圖所示:
此時lena圖像已經完整的現實出來了。Ok,我們再將“顯示區域”設置成256×256,看會是什么結果?設置好值后,單擊SetImagePart按鈕。效果如下圖所示:
此時,“顯示區域”只顯示了圖像的四分之一。是否已經理解了顯示區域大小的概念了?….無論理解與否,我們繼續設置“顯示區域”為1024×1024,然后單擊SetImagePart按鈕。效果如下圖所示:
此時,完整的圖像只能占據“顯示區域”的四分之一。至此,小程序介紹完畢。
關鍵代碼片段
第一次打開程序時,獲取控件中“顯示區域”大小。代碼如下:
1 textBox_Width.Text = hWindowControl1.ImagePart.Width.ToString(); 2 textBox_Height.Text = WindowControl1.ImagePart.Height.ToString();
SetImagePart按鈕功能。代碼如下:
1 int dWidth = Convert.ToInt32(textBox_Width.Text.Trim()); 2 int dHeight = Convert.ToInt32(textBox_Height.Text.Trim()); 3 if (dWidth > 0 && dHeight > 0) 4 { 5 hoWindow.ClearWindow(); 6 hoWindow.SetPart(0, 0, dHeight - 1, dWidth - 1); 7 hoImage.DispObj(hoWindow); 8 } 9 else
10 { 11 MessageBox.Show("The width of ImagePart is <= 0 or The height of ImagePart is <= 0"); 12 }