加载中…
正文 字体大小:

[转载]MFC/HALCON混合编程系列十六_保存图像和窗口

(2014-02-18 20:46:59)
标签:

转载

分类: Halcon/MFC
 任务:利用Halcon的算子实现图像和窗口的保存。
 
1.添加保存图像和保存窗口两个菜单项,然后自动生成事件响应函数。
 
2.修改保存图像响应函数如下:
voidCHalconMFCDlg::OnSaveimage()
{
    CFileDialog dlg(FALSE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        _T("Image files(*.jpg;*.bmp;*.png)|*.jpg;*.bmp;*.png|All files|*||"));//OFN_ALLOWMULTISELECT打开多文档选项。
    if(dlg.DoModal()==IDOK) //如果返回为确定,获得选择的文件名
    {
        CString pathname=dlg.GetFileName( ); //
        char* Filename = pathname.GetBuffer(pathname.GetLength()); 
        pathname.ReleaseBuffer();
        //set_system("image_dir","F:/VS2005workspace/HalconMFC/HalconMFC2.0/HalconMFC");
        write_image(Image,"jpg",0,Filename);//默认为格式,如果不是则添加此后缀。
    }
}
    此响应函数用到Halcon的write_image算子。其原型如下:
Herror write_image ( Hobject Image, const HTuple &Format, const HTuple &FillColor, const HTuple &FileName )
 
第一个参数Image为要保存的图像数据。
第二个参数Format为图像格式,默认值"tiff"格式的图像,可选项有{"tiff", "bmp", "jpeg", "ima", "jpeg 100", "jpeg 80", "jpeg 60", "jpeg 40", "jpeg20", "jp2", "jp2 50", "jp2 40", "jp2 30", "jp2 20", "png", "png best", "png fastest", "png none"}。
第三个参数FillColor为非图像定义域的填充颜色。默认为0,可以用类似"0xff0000"数表示彩色。
第四个参数FileName为保存的文件名。
 
如果自动保存文件的话,可以用使用set_system设置当前的路径。
 
3.修改保存窗口的响应函数
voidCHalconMFCDlg::OnSavewind()
{
    CFileDialog dlg(FALSE, NULL,NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        _T("Image files(*.jpg;*.bmp;*.png)|*.jpg;*.bmp;*.png|All files|*||"));//OFN_ALLOWMULTISELECT打开多文档选项。
    if(dlg.DoModal()==IDOK) //如果返回为确定,获得选择的文件名
    {
        //获取文件路径,读取图像。
        CString pathname=dlg.GetFileName( ); //
        char* Filename = pathname.GetBuffer(pathname.GetLength()); 
        pathname.ReleaseBuffer();
        //set_system("image_dir","F:/VS2005workspace/HalconMFC/HalconMFC2.0/HalconMFC");
        dump_window_image(&Image,WindowHandle);
        write_image(Image,"png",0,Filename);//png格式比jpg要清晰多。bmp似乎跟png差不多。
    }
}
与前面的不同,这里在保存图像之前添加dump_window_image操作。该操作将指定窗口里所有内容,复制到一幅图像中,然后保存此图就可以保存窗口。
但是这存在一个问题:当前窗口的大小可能与窗口内的图标对象的大小不一样。会导致分辨率的变化。
 
P.S.
使用dump_window(WindowHandle,"png",Filename);可以达到与前面两个算子同样的效果。
</!DOCTYPE>



0

阅读 评论 收藏 转载原文 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有