将DIB/bitmap读入内存并转为 halcon hobject

来源:互联网 发布:java电脑版86 编辑:程序博客网 时间:2024/05/18 01:50

问题由来:在mfc halcon混合编程中,发现halcon::readimage() 函数读取图片(8位8M/bmp)至少200ms,当然24位 32位bmp 倍数所消耗的时间倍数上涨。那么有没有什么方法加快读取速度?目前发现一个亲测可行的方式: 

1、通过 DIBAPI 读取图片,下载可转到点击打开链接,赚点积分微笑

2、获取所读读片的图像数据的首地址,注意非结构头地址

3、通过halcon算子GenImage1Extern or GenImage3Extern转为hobject


以下为从硬盘读取8位bmp,并转为halcon灰度图示意,24位相似,网上这方面资源较多,不在赘述。

HObject ho_Image;CFile file;file.Open(threadParameter->m_path,CFile::modeRead|CFile::modeNoTruncate);HDIB hDIB = ReadDIBFile(file);//加载bmp图片file.Close();LPSTR lpbi = (LPSTR)::GlobalLock((HGLOBAL)hDIB);//通过非连续内存片段的句柄获取指针,具体百度GlobalAllocLPSTR pimage =  FindDIBBits(lpbi);GenImage1Extern(&ho_Image, "byte", (Hlong)DIBWidth(lpbi), (Hlong)DIBHeight(lpbi), (Hlong)pimage, NULL);//转换关键函数,开发文档里说的很详细