Hobject转Bitmap,并在MFC中显示

   以相机采集图像为例


一、如果采集到的图像是灰度的,则:

      //采集灰度图像
      GrabImageAsync(&ho_Image, hv_AcqHandle, -1);
	  //获取图像单通道指针hv_Pointer
	  GetImagePointer1(GrayImag,&hv_Pointer,&hv_Type,&hv_Width1,&hv_Height1);
	  //获取图片大小
	  //将halcon类型的控制变量强制转换
	  Width = (Hlong)hv_Width1;
	  Height = (Hlong)hv_Height1;

	  //专门放灰度的指针
	  p = (BYTE *)hv_Pointer[0].L();
	  if(m_kong)
	  {
		  //pt = new BYTE(Width*Height);
		  //因为是灰度图,一个像素占一个字节
		  //为这个指针装halcon图像的单通道指针动态分配内存空间
		  pImage = new BYTE[Width*Height];
		  //将bool类型变量置为零,不让其一直申请内存空间
		  m_kong = FALSE;	
	  }

	  //将数据转到分配好空间的指针 pImage中
	  memcpy(pImage,p,Width*Height*sizeof(BYTE));
	  //变量转换完成,开始显示
	  //位图信息头
	  //给信息头指针分配内存空间
	  bmpinf = (BITMAPINFO*)Buf;
	  //初始化BITMAPINFO结构,此结构在保存bmp文件,显示采集图像时使用
	  bmpinf->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	  bmpinf->bmiHeader.biWidth = Width;
	  bmpinf->bmiHeader.biHeight = -Height;  //正负可以上下翻转图像
	  bmpinf->bmiHeader.biBitCount = 8;   //每个像素占8位
	  bmpinf->bmiHeader.biCompression = BI_RGB;
	  bmpinf->bmiHeader.biSizeImage = 0;
	  bmpinf->bmiHeader.biClrImportant = 0;
	  bmpinf->bmiHeader.biClrUsed = 0;
	  bmpinf->bmiHeader.biXPelsPerMeter = 0;
	  bmpinf->bmiHeader.biYPelsPerMeter = 0;
	  bmpinf->bmiHeader.biPlanes = 1;
	  //位图颜色表:灰度图比rgb三通道图多个颜色表,它由256和结构体,第一个结构体都是0,以此类推
	  for(int i = 0; i<256; i++)
	  {
		  bmpinf->bmiColors[i].rgbBlue=i;
		  bmpinf->bmiColors[i].rgbRed=i;
		  bmpinf->bmiColors[i].rgbGreen=i;
		  //预留一般为零
		  bmpinf->bmiColors[i].rgbReserved=0;
	  }
	  //显示部分
      CDC *pDC;
	  CRect Vedio;
	  pDC = GetDlgItem(IDC_DISPLAY_STATIC)->GetDC();
	  GetDlgItem(IDC_DISPLAY_STATIC)->GetClientRect(Vedio);
	  SetStretchBltMode(pDC->GetSafeHdc(),COLORONCOLOR);
	  //显示函数
	  StretchDIBits(pDC->GetSafeHdc(),
		  Vedio.left,
		  Vedio.top,
		  Vedio.Width(),
		  Vedio.Height(),
		  0,
		  0,
		  Width,   //图像宽
		  Height,  //图像高
		  pImage,  //图像缓冲区
		  bmpinf,  //BMP图像描述信息
		  DIB_RGB_COLORS,
		  SRCCOPY);

	  GetDlgItem(IDC_DISPLAY_STATIC)->ReleaseDC(pDC);

二、如果采集到的图像是彩色的,则:
后续添加

发布了74 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43197380/article/details/96631537