例子:
CImage image;
CBitmap* pBitmap = CBitmap::FromHandle(image.m_hBitmap);考虑到是临时变量,可以用指针来new,这样就全局了。
另外,不要认为有不妥,你CBitmap拷贝过去也要重新开内存到栈或者堆上。效果是一样的。记得自己delete就可以了。

解决方案 »

  1.   


    CBitmap::FromHandle 不是得到临时的吗?
    我的CBitmap是类的成员变量,别的地方要用到的~
      

  2.   

    LZ:你是不是要将PNG格式的图片动态加载到程序中吗?
            如果是的话1.下载(GDI+ for VC6.0 SDK)GDIPlus文件将其中的Includes和Lib中的文件拷到vc目录下的Includes和Lib文件夹中.(http://www.codeguru.com/code/legacy/gdi/GDIPlus.zip) //这步不一定需要,因为现在已经是高版本了。2.在你将要使用GDI+的工程中,完成初始化工作: 
    在StdAfx.h中加入 
    #include <comdef.h>//初始化一下com 
    #ifndef ULONG_PTR 
    #define ULONG_PTR unsigned long* 
    #include "GdiPlus.h" 
    using namespace Gdiplus; 
    #endif 
    #pragma comment(lib,"gdiplus.lib") 3.在CApp头文件中加入(以下两句放入的位置不对很有可能出现错误)
    ULONG_PTR        m_gdiplusToken; 
    GdiplusStartupInput  m_gdiplusStartupInput; 4.在InitInstance()中加入: 
    GdiplusStartup(&m_gdiplusToken, &m_gdiplusStartupInput, NULL); 
    //就是这个语句的位置很关键,要放在函数的最前面。 5.在int CLianxiApp::ExitInstance()加入(这个方法需要自己加入) 
    GdiplusShutdown(m_gdiplusToken); 
    函数的返回值可以是return CWinApp::ExitInstance();
    此时GDI+设置成功。 
    ----------------------------- 程序中显示PNG文件的方法: 
    ----------------------------- 
      Graphics graphics(GetDC()->m_hDC); 
      Image image(L"ValidCode.png",false); //这里用路径比较好。当然图片的放在工程下面。
      graphics.DrawImage(&image,10,10,100,100); 
    ----------------------------- 
    以上3句就够了,可以放在OnPaint()中,也可以放在其它地方,如按钮的执行函数中。 
      

  3.   

    还有一个加载PNG格式的图片的方法,要重新冲CWnd类派生出自己的类,然后重载许多方法,比较复杂.......
      

  4.   

    CBitmap::FromHandle 不是得到临时的吗?
    我的CBitmap是类的成员变量,别的地方要用到的~你没理解我下面的话,例子是例子。
    下面我建议你CImage * image = new CImage;
    这样就全局啦。
      

  5.   

    哦`谢谢您,我已经用Cimage实现加载和其他操作了,但用到一个别人的类,他是用CBitmap来实现的,所以我想把Cimage
    转成CBitmap传给他.现在我用CBitmap .Attach();来实现,可是我的CImage就必须是全局的,这样我的全局变量好多啊,不好维护.
      

  6.   

    image.m_hBitmap是私有的能取得到?
      

  7.   

    CImage转为CBitmap:
    CImage* img;
    CBitmap* bm;
    img->Load(lpszSourceName);
    HBITMAP hbmp =(HBITMAP)img->operator HBITMAP();
    bm->DeleteObject();
    bm->Attach(hbmp);
    --------------------------
    这才是正解
      

  8.   

    请问下各位大哥,CImage得到的HBITMAP(8~24bits)位图 然后转化为CBitmap显示不正常。
    HBITMAP我是重新定义位图头,像素数据则用从GetDIB得到....