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 版本.该版本最大的更新是加入了简体中文语言,这意味着未来神马汉化包.中文 ...
随机推荐
- THE SENSE OF BEAUTY
#include<stdio.h> int main() { ][] = { " ,.:;j", " ,: i. .,:;ff", " : ...
- [转载] HTTP请求的TCP瓶颈分析
原文: http://bhsc881114.github.io/2015/06/23/HTTP%E8%AF%B7%E6%B1%82%E7%9A%84TCP%E7%93%B6%E9%A2%88%E5%8 ...
- Generator 函数的含义与用法
Generator 函数是协程在 ES6 的实现,最大特点就是可以交出函数的执行权(即暂停执行). function* gen(x){ var y = yield x + 2; return y; } ...
- 半平面交模板(O(n*n)&& O(n*log(n))
摘自http://blog.csdn.net/accry/article/details/6070621 首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分 ...
- 关于mysql的基础知识
一.数据库的简介 什么是数据库? 数据的仓库,如:在atm的实例中我们创建一个db目录称之为数据库 什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 他们 ...
- 可重入锁 & 自旋锁 & Java里的AtomicReference和CAS操作 & Linux mutex不可重入
之前还是写过蛮多的关于锁的文章的: http://www.cnblogs.com/charlesblc/p/5994162.html <[转载]Java中的锁机制 synchronized &a ...
- white-space: nowrap
CSS:需要加上宽度(width:100px).超出隐藏(overflow:hidden;).强制在同一行显示(white-space: nowrap;).省略号(text-overflow:elli ...
- JSP中RequestDispatcher的用法
RequestDispatcher是一个Web资源的包装器,可以用来把当前request传递到该资源,或者把新的资源包括到当前响应中.RequestDispatcher接口中定义了两个方法:inclu ...
- Android控件之Button(按钮控件)和ImageButton(图片按钮控件)
一.Button和ImageButton特证: 1.共同特证: 都可以作为一个按钮产生点击事件 2.不同特证: Button有text的属性,ImageButton没有 ImageButton有src ...
- SDL2.0的SDL_Event事件处理
SDL_Event事件集合 SDL_AudioDeviceEvent SDL_ControllerAxisEvent SDL_ControllerButtonEvent SDL_ControllerD ...