Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 523|回复: 0

对于halcon与MFC或c#编程中,当写入滚轮放缩图像时,图像会闪屏的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-15 15:49:06 | 显示全部楼层 |阅读模式

     

    //会闪屏的代码,更新图像函数如下(以MFC为例)*******************************************************

    void CGeomLocationApp::UpdateImageEx(Hobject Image, //图像
    Hobject &objDispR, //显示图形红色
    Hobject &objDispG, //显示图形绿色
    Hobject &objDispB, //显示图形蓝色
    Hobject &objDispY, //显示图形黄色
    Hlong hWindowHandle, //窗口句柄
    BOOL bInitial //是否对图形进行初始化操作
    )
    {
    //复位显示图形
    if (bInitial==TRUE)
    {
    objDispR.Reset();
    objDispG.Reset();
    objDispB.Reset();
    objDispY.Reset();
    }
    //清楚显示窗口
    clear_window(hWindowHandle);
    //显示图像
    disp_obj(Image,hWindowHandle);
    //显示图形
    if (objDispR.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"red");
    disp_obj(objDispR,hWindowHandle);
    }
    if (objDispG.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"green");
    disp_obj(objDispG,hWindowHandle);
    }
    if (objDispB.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"blue");
    disp_obj(objDispB,hWindowHandle);
    }
    if (objDispY.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"yellow");
    disp_obj(objDispY,hWindowHandle);
    }
    set_color(hWindowHandle,"red");
    }

    //会闪屏的代码,更新图像函数如下*******************************************************

    如需不闪屏,只需在clear_window前后,加入两个函数,通过设置系统的flush_graphic,来实现,其代码如下

    void CGeomLocationApp::UpdateImageEx(Hobject Image, //图像
    Hobject &objDispR, //显示图形红色
    Hobject &objDispG, //显示图形绿色
    Hobject &objDispB, //显示图形蓝色
    Hobject &objDispY, //显示图形黄色
    Hlong hWindowHandle, //窗口句柄
    BOOL bInitial //是否对图形进行初始化操作
    )
    {
    //复位显示图形
    if (bInitial==TRUE)
    {
    objDispR.Reset();
    objDispG.Reset();
    objDispB.Reset();
    objDispY.Reset();
    }
    set_system("flush_graphic","false");
    //清楚显示窗口
    clear_window(hWindowHandle);
    set_system("flush_graphic","true");
    //显示图像
    disp_obj(Image,hWindowHandle);
    //显示图形
    if (objDispR.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"red");
    disp_obj(objDispR,hWindowHandle);
    }
    if (objDispG.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"green");
    disp_obj(objDispG,hWindowHandle);
    }
    if (objDispB.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"blue");
    disp_obj(objDispB,hWindowHandle);
    }
    if (objDispY.Id()!=H_EMPTY_REGION)
    {
    set_color(hWindowHandle,"yellow");
    disp_obj(objDispY,hWindowHandle);
    }
    set_color(hWindowHandle,"red");
    }

     

     

    //其原因是"flush_graphic":图形更新参数,true显示实时更新,false不更新可提高运行速度

    其默认为true,实时更新,太是当图像太大时,一来读取是需要,显示时间的,二来清除图像有黑屏这段时间,这使得我们会有闪屏的感觉,这时,我们关闭实时显示,清除后再打更新图像流,便使得图像刷新时不会闪。

    同时,也引入下halcon函数中set_system的一些常用参数的意义,其转载自http://blog.csdn.net/xy943294069/article/details/41867973,"sunny被注册"的文章,感谢其分享

    set_system( : : SystemParameter, Value : )设定系统参数

    border_shape_models:设置模板是否必须在ROI内

    "flush_graphic":图形更新参数,true显示实时更新,false不更新可提高运行速度

    "int2_bits":图像缩放相关参数,-1为自动

    "backing_store":定义是否刷新所有窗口

    "icon_name":定义图形窗口的名称编号
    "default_font" *):默认字体
    "update_lut":是否使用系统默认颜色表
    "use_window_thread":Windows下设置为true启用所有halcon的图形文本消息线程,提高运行速度
    "graphic_stack_size":设定图形堆栈大小
    "x_package":数据传输包大小,如果包过大导致错误,可尝试改小
    "neighborhood", "tsp_neighborhood":设定相邻像素为4或8,对使用相邻像素算子产生影响
    "init_new_image", "tsp_init_new_image":设定新图像过滤前是否需要填充0,如整幅图像过滤或图像不过滤的区域是没有影响的,可能用于掩盖
    "no_object_result", "tsp_no_object_result":如果图像为空是否导致异常,true发出异常
    "empty_region_result", "tsp_empty_region_result":空的Region是否导致异常
    "store_empty_region", "tsp_store_empty_region":定义空的(没有任何目标)是否作为结果输出
    "clip_region", "tsp_clip_region":定义是否修剪Region以适应图像显示
    "int_zooming":定义图像适应大小是整数还是浮点
    "pregenerate_shape_models":定义是事先生成模板还是使用时创建
    "border_shape_models":与图像边缘接触模板定位目标是否有效
    "opengl_context_cache_enable":使用显卡加速如果显卡支持,3D
    "opengl_hidden_surface_removal_enable":显卡加速,3D效果
    "opengl_compatibility_mode_enable":显卡加速使能
    "image_dpi":设定保存图片时的DPI分辨率
    "width", "tsp_width":系统内部图像宽度
    "height", "tsp_height":系统内部图像高度
    "current_runlength_number", "tsp_current_runlength_number":Region的最大数量
    "reentrant" *):设定线程并行化是否需要同步,不同步存在线程安全危险
    "thread_num" *), "tsp_thread_num":设定并行化线程数量,default为使用物理内核最大数量
    "thread_pool" *):是否仅使用已有的线程,false可创建新的线程
    "flush_file":文件更新,false当进入换行时才更新文件
    "ocr_trainf_version":定义学习的OCR文件版本
    "filename_encoding":文件名称编码格式
    "halcon_dir" *):输入halcon安装根目录
    "example_dir" *):输入范例目录
    "image_dir" *):输入图像目录
    "3d_model_dir" *):输入3D模型目录
    "lut_dir" *):色彩板目录
    "help_dir" *):帮助目录
    "do_low_error":低等级错误的丢出
    "cancel_draw_result", "tsp_cancel_draw_result":被终止算子反应方式,默认绘制终止符不返回错误
    "clock_mode":计时方式
    "timer_mode"计时方式
    "max_connection":可输出的最大Region数量,0输出所有
    "extern_alloc_funct":函数指针的使用,0使用
    "image_cache_capacity" *):设定图片空间大小上限
    "global_mem_cache":缓存的使用方式
    "temporary_mem_cache" *):临时缓存的使用,true重载共享,false专有
    "alloctmp_max_blocksize":定义最大的存储块大小,temporary_mem_cache为true有效
    "database" *):数据调试时使用数据表格
    "mmx_enable":显卡加速使能,mmx_supported为false无效
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-13 00:50 , Processed in 0.076750 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表