例子:
CImage image;
CBitmap* pBitmap = CBitmap::FromHandle(image.m_hBitmap);考虑到是临时变量,可以用指针来new,这样就全局了。
另外,不要认为有不妥,你CBitmap拷贝过去也要重新开内存到栈或者堆上。效果是一样的。记得自己delete就可以了。
CImage image;
CBitmap* pBitmap = CBitmap::FromHandle(image.m_hBitmap);考虑到是临时变量,可以用指针来new,这样就全局了。
另外,不要认为有不妥,你CBitmap拷贝过去也要重新开内存到栈或者堆上。效果是一样的。记得自己delete就可以了。
CBitmap::FromHandle 不是得到临时的吗?
我的CBitmap是类的成员变量,别的地方要用到的~
如果是的话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()中,也可以放在其它地方,如按钮的执行函数中。
我的CBitmap是类的成员变量,别的地方要用到的~你没理解我下面的话,例子是例子。
下面我建议你CImage * image = new CImage;
这样就全局啦。
转成CBitmap传给他.现在我用CBitmap .Attach();来实现,可是我的CImage就必须是全局的,这样我的全局变量好多啊,不好维护.
CImage* img;
CBitmap* bm;
img->Load(lpszSourceName);
HBITMAP hbmp =(HBITMAP)img->operator HBITMAP();
bm->DeleteObject();
bm->Attach(hbmp);
--------------------------
这才是正解
HBITMAP我是重新定义位图头,像素数据则用从GetDIB得到....