iplimage 转HBITMAP

HBITMAP  IplImage2hBitmap(IplImage* pImg)
{
    cvFlip(pImg, NULL);
    BYTE tmp[sizeof(BITMAPINFO)+1024];
    BITMAPINFO *bmi = (BITMAPINFO*)tmp;
    HBITMAP hBmp;
    int i;
    memset(bmi,0,sizeof(BITMAPINFO));
    bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmi->bmiHeader.biWidth = pImg->width;
    bmi->bmiHeader.biHeight = pImg->height;
    bmi->bmiHeader.biPlanes = 1;
    bmi->bmiHeader.biBitCount = pImg->nChannels * pImg->depth;
    bmi->bmiHeader.biCompression = BI_RGB;
    bmi->bmiHeader.biSizeImage = 0;//if biCompression is BI_RGB,this can be 0
    bmi->bmiHeader.biClrImportant =0 ;

    switch(pImg->nChannels * pImg->depth)
    {
    case 8 :
        for(i=0 ; i < 256 ; i++){
            bmi->bmiColors[i].rgbBlue = i;
            bmi->bmiColors[i].rgbGreen= i;
            bmi->bmiColors[i].rgbRed= i;
        }
        break;
    case 32:
    case 24:
        ((DWORD*) bmi->bmiColors)[0] = 0x00FF0000;
        ((DWORD*) bmi->bmiColors)[1] = 0x0000FF00;
        ((DWORD*) bmi->bmiColors)[2] = 0x000000FF;
        break;
    }
    hBmp = ::CreateDIBSection(NULL,bmi,DIB_RGB_COLORS,NULL,0,0);

    SetDIBits(NULL,hBmp,0,pImg->height,pImg->imageData,bmi,DIB_RGB_COLORS);

    return hBmp;
}
时间: 2024-09-30 19:34:07

iplimage 转HBITMAP的相关文章

IplImage 与 CBitmap类 的相互转换

 在VC中利用OpenCV做图像处理程序时,有时需要把IpImage 类型和CBitmap类型相互转换,这样就可以利用VC中的GDI+函数对图像进行某些特殊的显示和处理,非常方便.这里是本人项目中写的两个转换小函数,仅供参考,转载注明,这样方便发现问题的朋友联系我及时修改. IplImage转换为CBitmap类型 CBitmap *IplImage2CBitmap(const IplImage *pImage) { if( pImage && pImage->depth ==

Mat转化为IplImage类型和CvMat类型

cv::Mat img; CvMat  cvMatImg = img; IplImage IpImage = img; 转化后传递的是矩阵头. IplImage类型转化为Mat和CvMat类型 IplImage *IpImage = cvLoadImage("*.jpg"): Mat img(IpImage,true):

CBitmap、HBITMAP、BITMAP相互转换

一:理解 BITMAP是C++中定义的位图结构体 HBITMAP是Windows中使用的位图句柄 CBitmap是MFC封装的位图类 二:相互转换 1.HBITMAP->CBitmap HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL, str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); CBitmap bitmap; bitmap.Attach(hBitmap); 实验源码,在(OnPaint函数中添加) CString st

常用数据结构:IplImage

typedef struct_IplImage{      int nSize; //IplImage大小      int ID; //版本(=0)      int nChannels; //大多数OPENCV函数支持1.2.3或4个通道      int alphaChannel; //被opencv忽略      int depth; //像素的位深度,主要有以下支持格式:IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, I

CvMat、Mat、IplImage之间的转换详解及实例

见原博客:http://blog.sina.com.cn/s/blog_74a459380101obhm.html OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数.初学者应该掌握并熟练应用.但是我认为计算机专业学习的方法是,不断的总结并且提炼,同时还要做大量的实践,如编码,才能记忆深刻,体会深刻,从而引导自己想更高层次迈进. 1.初始化矩阵: 方式一.逐点赋值式: CvMat* mat = cvCreateMat( 2, 2, CV_64FC1 ); cvZ

手动封装OpenCV1.0的IplImage读取保存功能遇到的小问题

最近准备重新学习图像处理的知识,主要目的是自己实现一遍图像处理的算法,所以除了读取.保存图像外的操作都自己写,没想到直接封装OpenCV的读取.保存功能的第一步就出错.关键代码如下 void MyImage::Clear() { if (m_pImg != nullptr) { std::cout << "释放内存" << std::endl; delete m_pImg; m_pImg = nullptr; } } 其中m_pImg是IplImage*类型,析

IplImage 与 QImage 相互转换

在使用Qt和OpenCV编程时,对于它们各自的图像类QImage和IplImage难以避免的需要互相之间的转换,下面我们就来看它们的相互转换. 1. QImage 转换为 IplImage IplImage *QImageToIplImage(const QImage * qImage) { int width = qImage->width(); int height = qImage->height(); CvSize Size; Size.height = height; Size.wi

MFC加载HCURSOR/HICON/HBITMAP

加载HCURSOR/HICON/HBITMAP 在系统中提供了函数 LoadCursor LoadBitmap LoadIcon 1.      调用方法一般为: HCURSOR: LoadCursor(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDC_CURSOR1)); HICON: LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON1)); HBITMAP: LoadBitmap(A

OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?

在使用opencv的过程中,无论使用原始的IplImage和CvMat类型,还是用最新C++版本的Mat类型,在创建和使用过程中,经常会遇到CV_8UC1.CV_8UC3.CV_32FC3等声明,我以前也经常遇到,曾经看懂了,现在又忘记了,现在把它写下来,方便以后查看,遇到同样问题的菜鸟也能尽快理解这些声明是怎么回事. 先把opencv源代码贴出来 #define CV_CN_MAX 512 #define CV_CN_SHIFT 3 #define CV_DEPTH_MAX (1 << CV