MFC&Halcon之圖片顯示


上一篇介紹了MFC調用Halcon功能的簡單例子,在這個例子中,點擊按鈕會彈出一個窗口顯示圖片,但是這樣顯示並不美觀,而且。。。於是我決定把顯示窗口做在MFC的窗體內部。

具體的方案是:使用一個Picture Control 控件,調用Halcon中的OpenWindow函數,將其參數中的父窗口設為Picture Control 的句柄,就可以在控件內顯示我們的照片了,同時要注意縮放一下圖片以適應控件大小。

OpenWindow

OpenWindow這個函數的用法可以在Halcon的幫助中找到,注意要看C++函數而非HDevelop函數。

image

函數原型如下,使用這個函數無需再MFC中另做聲明:

void OpenWindow(const HTuple& Row, const HTuple& Column, const HTuple& Width, const HTuple& Height, const HTuple& FatherWindow, const HTuple& Mode, const HTuple& Machine, HTuple* WindowHandle)

MFC程序

還是新建一個對話框程序,然后添加一個按鈕和一個PictureControl控件,控件的ID默認為IDC_STATIC。

image

正如上一篇中一樣,首先在對話框類的頭文件和cpp文件中包含halcon的頭文件和命名空間

#include "halconcpp.h"
using namespace HalconCpp;

然后雙擊按鈕填寫按鈕的響應函數,這里為了方便把halcon的變量直接定義在了響應函數中:

void CHalconWindowDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知處理程序代碼
    HObject  ho_Image;
    HTuple HWindowID;
    CRect Rect;
    HTuple m_HWindowID;
    HTuple m_ImageWidth,m_ImageHeight;

    CWnd * pWnd = GetDlgItem( IDC_STATIC);
    HWindowID = (Hlong)pWnd->m_hWnd;//獲取父窗口句柄
    pWnd->GetWindowRect(&Rect);
    OpenWindow(0,0,Rect.Width(),Rect.Height(),HWindowID,"visible","",&m_HWindowID );
    //顯示靜態圖片
    ReadImage(&ho_Image, "C:/Users/lenovo/Desktop/test.jpg");
    GetImagePointer1(ho_Image,NULL,NULL,&m_ImageWidth,&m_ImageHeight);
    SetPart(m_HWindowID,0,0,m_ImageHeight-1,m_ImageWidth-1);
    DispObj(ho_Image, m_HWindowID);
}
其中,
使用OpenWindow時將PictureControl控件的大小傳進去,作為開辟的Halcon窗口的大小,這樣兩個窗口疊加在一起了。
SetPart是Halcon函數,作用是調整圖片在窗口中的位置(設定圖片左上角坐標和右下角坐標)
實現的效果如下:
image

試着將OpenWindow語句改為

OpenWindow(50,20,Rect.Width()-100,Rect.Height()-100,HWindowID,"visible","",&m_HWindowID );

結果如下:

image


免責聲明!

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



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