[MFC] 数据转换:Hobject转Bitmap

简介: [MFC] 数据转换:Hobject转Bitmap

以相机采集图像为例


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

//采集灰度图像
      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);

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

后续添加

目录
相关文章
|
4月前
|
图形学
小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换
小功能⭐️Unity中Texture2D、Sprite、Texture、RenderTexture、image、byte的转换
|
4月前
|
算法 API 图形学
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
193 2
|
C#
WPF(C#)中Bitmap与BitmapImage相互转换
原文:WPF(C#)中Bitmap与BitmapImage相互转换 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/47296339 ...
4130 0
|
C#
GDI+ Bitmap与WPF BitmapImage的相互转换
原文:GDI+ Bitmap与WPF BitmapImage的相互转换 using System.Windows.Interop; //.
1001 0
|
C#
Wpf ImageSource对象与Bitmap对象的互相转换
原文:Wpf ImageSource对象与Bitmap对象的互相转换 Bitmap to ImageSource 将得到的Bitmap对象转换为wpf常用的Imagesource对象 BitmapSource bs = Imaging.
2137 0
|
Windows
[UWP]使用Writeable?Bitmap创建HSV色轮
原文:[UWP]使用Writeable?Bitmap创建HSV色轮 1. HSV 1.1 HSV的定义 HSV都是一种将RGB色彩模型中的点在圆柱坐标系中的表示法,这种表示法试图做到比RGB基于笛卡尔坐标系的几何结构更加直观。
1475 0