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 版本.该版本最大的更新是加入了简体中文语言,这意味着未来神马汉化包.中文 ...
随机推荐
- win10系统更新补丁时进度条一直卡在0%不动的解决方案
为了能够让win10系统更加安全稳定,很多用户都会时不时为自己的电脑安装补丁.不过,部分用户在为win10系统更新补丁时,却会遇到进度条一直卡在0%不动的问题.这该怎么办呢?下面,小编就告诉大家解决该 ...
- [转]ubuntu下安装程序的三种方法
出处:http://www.cnblogs.com/xwdreamer/p/3623454.html 引言 在ubuntu当中,安装应用程序我所知道的有三种方法,分别是apt-get,dpkg安装de ...
- js之oop <一> 创建对象,构造器(class)
js中除了基本类型,就是对象.可以说在js中处处皆对象. 由于js是弱语言,在编写的过程中很容易混淆 object 和 class 也就是对象和构造器. object(对象):一般对象都由var关键字 ...
- 手机CPU知识扫盲:谈谈手机CPU架构与原理 (全
CPU是手机上面最复杂,最贵的Soc(芯片),担任的也是手机中大脑的位 置,是手机跑分性能的决定性硬件.智能手机发展到今天,各大手机CPU厂商也从春秋战国逐渐到了现在四国鼎立的时代(高通,MTK,三星 ...
- js call与apply的区别-Tom
.apply和.call方法是在函数原型中定义的两个方法(因此所有的函数都可以访问它)允许去手动设置函数调用的this值,他们用接受 的第一个参数作为this值,this 在调用的作用域中使用.这两个 ...
- poj1066Treasure Hunt(线段相交)
链接 很纠结的找到了所有线段的中点,又很纠结的找到了哪些中点可以直接相连,最后bfs一下求出了最短路.. #include <iostream> #include<cstdio> ...
- ARM-linux嵌入式开发平台搭建1
初学嵌入式开发,由于是自学,走了很多弯路,现总结一下嵌入式ARM-LINUX开发环境搭建步骤: 1.安装linux系统,由于初学,我选择fedora 14.安装的具体步骤就不详细说了. 2.安装NFS ...
- hiho_1055_刷油漆
题目大意 一棵树,每个节点都有相应的value值.从根开始选择M个节点相互连通,使得这些节点的value值之和最大. 题目链接:[刷油漆][1] 题目分析 典型的树形dp,dp[i][j] 表示以节点 ...
- 基于 php-redis 的redis操作
基于 php-redis 的redis操作 林涛 发表于:2016-5-13 12:12 分类:PHP 标签:php,php-redis,redis 203次 redis的操作很多的,下面的例子都是基 ...
- eclips引入Java源代码
window->>preferences->>Java->Installed JRES 如图所示 这是中文本的 点击“Installed JRES”选择如下图所示的jdk ...