将Bmp图导到资源中,然后CBBitmap::LoadBitmap()加进来,最简单的办法

解决方案 »

  1.   

    你先得给它一个容器啊,显示在VIEW中,DIALOG或者控件上?
      

  2.   

    如果是动态打开的BMP文件,要调用SetDIBitsToDevice
      

  3.   

    可以找一下CDIB这个类。网上应该是很多的,要不去找个何斌的代码看看
      

  4.   

    楼主意思是用VC编程以实现打开BMP图像,以便后续的图像处理吧??其实网上有很多源代码,很多书上也有!!1、要知道BMP的结构,它包括文件头、信息头、颜色表和图像数据四部分!
    2、然后把BMP的四部分一部分一部分打开,前面两个头信息包括一些对你后续有用的数据,最后的图像数据部分就是我们进行图像处理真正的数据!
    3、图像读进来以后,可以自己做一下显示函数(如:StretchDIBits),就可以显示了!
    个人觉得打开BMP是图像处理的基础,即使用了别人的程序,最好自己也要看懂,这样既可以了解BMP的结构有利于图像处理,而且对编程提高也有用!
      

  5.   

    前几天我也刚刚学了这个,拿出大家看一下,比较有没有更简单的方法代码如下:(1)在头文件里的加:
    #define VIDEOHEIGHT  600
    #define VIDEOWIDTH   800BITMAPINFO bitInfo;
    BITMAPFILEHEADER bitFile;
    BYTE ImgBuf[VIDEOWIDTH*VIDEOHEIGHT*3];
    BYTE ImgBuf_temp[VIDEOWIDTH*VIDEOHEIGHT*3];#define bheight bitInfo.bmiHeader.biHeight
    #define bwidth bitInfo.bmiHeader.biWidth
    (2)初始化
             bitInfo.bmiHeader.biBitCount      = 24;
    bitInfo.bmiHeader.biClrImportant  = 0;
    bitInfo.bmiHeader.biClrUsed       = 0;
    bitInfo.bmiHeader.biCompression   = BI_RGB;
    bitInfo.bmiHeader.biHeight        = VIDEOHEIGHT;
    bitInfo.bmiHeader.biWidth         = VIDEOWIDTH;
    bitInfo.bmiHeader.biPlanes        = 1;
    bitInfo.bmiHeader.biSize          = 40;
    bitInfo.bmiHeader.biSizeImage     = VIDEOWIDTH*VIDEOHEIGHT*3;
    bitInfo.bmiHeader.biXPelsPerMeter = VIDEOWIDTH;
    bitInfo.bmiHeader.biYPelsPerMeter = VIDEOHEIGHT;(3)在你的消息响应里的代码         CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,
    "BMP(*.bmp)|*.bmp||",NULL);
    if(dlg.DoModal() == IDOK)
    pathName = dlg.GetPathName();
    CFile f;
    f.Open(pathName , CFile::modeRead , NULL);
    f.Read(&bitFile,sizeof(BITMAPFILEHEADER));
    f.Read(&bitInfo,sizeof(BITMAPINFOHEADER));
    f.Read(ImgBuf,bwidth*bheight*3);
    memcpy(ImgBuf_temp,ImgBuf,bwidth*bheight*3); CDC MemDC;
    CBitmap bitmap;
    CClientDC dc(this); bitmap.CreateCompatibleBitmap(&dc,bwidth,bheight);
    MemDC.CreateCompatibleDC(&dc);
    MemDC.SelectObject(&bitmap);
    SetStretchBltMode(MemDC.m_hDC,BLACKONWHITE);//COLORONCOLOR);
    StretchDIBits(MemDC.m_hDC,0,0,bwidth,bheight,
    0,0,bwidth,bheight,ImgBuf,&bitInfo,DIB_RGB_COLORS,SRCCOPY); dc.BitBlt(0,0,bwidth,bheight,&MemDC,0,0,SRCCOPY); MemDC.DeleteDC();