Halcon 10.0:Hobject图像转CBitmap
void HImage2CBitmap(Hobject pImage,CBitmap *wImage)
{
char lpcsType[MAX_STRING];
Hlong lPointer,width,height,channels;
Hlong lPointerR,lPointerG,lPointerB;
count_channels(pImage,&channels);
//获取Halcon数据的Long指针
if (channels == )
{
get_image_pointer3(pImage,&lPointerR,&lPointerG,&lPointerB,lpcsType,&width,&height);
}else
{
get_image_pointer1(pImage,&lPointer,lpcsType,&width,&height);
} //创建文件头
BYTE tmp[sizeof(BITMAPINFO)+];
BITMAPINFO *bmi = (BITMAPINFO*)tmp;
HBITMAP hBmp; memset(bmi,,sizeof(BITMAPINFO));
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi->bmiHeader.biWidth = width;
bmi->bmiHeader.biHeight = -height; //正负可以上下翻转图像
bmi->bmiHeader.biPlanes = ;
bmi->bmiHeader.biBitCount = *channels;
bmi->bmiHeader.biCompression = BI_RGB;
bmi->bmiHeader.biSizeImage = ; //if biCompression is BI_RGB,this can be 0
bmi->bmiHeader.biClrImportant = ;
//初始化数据
switch(*channels)
{
case :
for(int i= ; i < ; i++){
bmi->bmiColors[i].rgbBlue = i;
bmi->bmiColors[i].rgbGreen= i;
bmi->bmiColors[i].rgbRed= i;
}
break;
case :
case :
((DWORD*) bmi->bmiColors)[] = 0x00FF0000;
((DWORD*) bmi->bmiColors)[] = 0x0000FF00;
((DWORD*) bmi->bmiColors)[] = 0x000000FF;
break;
}
hBmp = ::CreateDIBSection(NULL,bmi,DIB_RGB_COLORS,NULL,,); //Halcon转换成BYTE数据
BYTE *pData = new BYTE[width*height*channels];
long byteStep = ;
if (channels == )
{
byteStep = *width;
BYTE *pHimageR = (BYTE*)lPointerR;
BYTE *pHimageG = (BYTE*)lPointerG;
BYTE *pHimageB = (BYTE*)lPointerB;
for (int i=; i<height; ++i)
{
for (int j=; j<width; ++j)
{
*(pData + i*byteStep + *j + ) = *pHimageB;
*(pData + i*byteStep + *j + ) = *pHimageG;
*(pData + i*byteStep + *j + ) = *pHimageR;
pHimageR++;
pHimageG++;
pHimageB++;
}
}
}else
{
byteStep = width;
BYTE *pHimage = (BYTE*)lPointer;
for (int i=; i<height; ++i)
{
for (int j=; j<width; ++j)
{
*(pData + i*byteStep + j) = *pHimage;
pHimage++;
}
}
} //BYTE数据拷贝
SetDIBits(NULL,hBmp,,height,pData,bmi,DIB_RGB_COLORS); //CBitmap关联HBITMAP
wImage->Attach(hBmp); delete [] pData; return;
}
对于灰度图像和彩色图像基本能使用,只测试过宽为4的倍数的图像。另外速度和效率可能不够用,500W的彩色图像(约14M)时间估计在1s左右。
有能力的可以自行优化下或留言交流下想法。
Halcon 10.0:Hobject图像转CBitmap的更多相关文章
- Halcon 10.0:Sample 分割边缘拟合圆Circles.hdev
处理流程:快速二值化(区域)->获取区域边缘->截取边缘->膨胀边缘区域(定位)->定位区域进行边缘检测->边缘分割:线和圆->选择属性为圆的弧->拟合圆 * ...
- Halcon 10.0 Sample:完整性检查(圆形)
* ball.hdev: Inspection of Ball Bonding * 球接合检查 Comment Time:// *核心思想:.白色区域用作自动ROI,黑色区域是目标 * .Openin ...
- Visual Studio 10.0设置引用HalconDotNet.dll
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010435562/article/details/8858638 開始做Halcon的上位机.选用 ...
- Javascript高级编程学习笔记(93)—— Canvas(10) 模式及图像数据
模式 模式其实就是重复的图像,用来填充或描边图形 要创建一个新模式,可以调用 createPattern()并传入两个参数 一个HTML img元素 用于表示如何重复的字符串 "repeat ...
- CentOS7 编译安装 nginx-1.10.0
对于NGINX 支持epoll模型 epoll模型的优点 定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的 ...
- Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its de
页面加载时出现这个错误: Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Cul ...
- Centos7下安装mono3.10.0
mono 3.10.0 正式发布:性能进一步改进,以前已经写过一篇 Centos 7.0 安装Mono 3.4 和Jexus 5.6.下面我们在CentOS 7上通过源码安装Mono 3.10, 需 ...
- mono 3.10.0 正式发布:性能进一步改进
Mono是Xamarin资助的一个项目,是微软的.NET框架的开源实现.它使得使用C#.F#和其他.NET语言进行跨平台开发成为可能.Xamarin在Mono之上构建了跨平台开发工具以及像Xamari ...
- VMware Workstation 10.0 正式版官方简体中文下载(附序列号)
虚拟机界数一数二的王者软件VMWare Workstation 今日推出了最新的VMware Workstation 10.0 版本.该版本最大的更新是加入了简体中文语言,这意味着未来神马汉化包.中文 ...
随机推荐
- 关于ASP.NET的web.config的小笔记
在ASP和MVC开发中,有一些参数是需要活动更改的,最常见的就是数据库的链接字符串<connectionStrings>节点下配置的.在今天接触的项目中,我又接触到了自定义配置参数,就是可 ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- (四)Ubuntu 14.04 文件服务器--samba的安装和配置
samba是Linux系统上的一种文件共享协议,可以实现Windows系统访问Linux系统上的共享资源,现在介绍一下如何在Ubuntu 14.04上安装和配置samba一. 一.更新源列表 打开&q ...
- java获取客户访问IP
原文:http://blog.csdn.net/mydwr/article/details/9357187 /** * 获取访问者IP * * 在一般情况下使用Request.getRemoteAdd ...
- Android控件之MultiAutoCompleteTextView(自动匹配输入的内容)
一.功能 可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,可用在发送短信,发邮件时选择联系人这种类型中 二.独特属性 android:comp ...
- grep的用法
grep的用法首先创建我们练习grep命令时需要用到的demo文件demo_file. $ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN ...
- Struts2文件上传
1 在Struts2中上传文件需要 commons-fileupload-1.2.1.jar.commons-io-1.3.2.jar 这两个包. 2 确认页面form表单上的提交方式为POST, ...
- Structs1 -配置例子(转)
转自:(http://blog.csdn.net/xys_777/article/details/7542095) Action, ActionForm, ActionForward ,这三个对象构成 ...
- js封装,一个JS文件引用多个JS文件
(function() { //加载 varobj = {}; /** * 动态加载脚本函数 * @param url 要加载的脚本路径 * @param callback ...
- 如何设计一个RPC系统
版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/162 来源:腾云阁 https://www.qclou ...