|
关键代码如下:
//开始及结束GDI+,期间的代码可以把GDI+的绘图函数运用到图像对象上
Graphics* CGrap::CImage::BeginGDIPlus()
{
if(NULL==m_pData)return NULL;
if(NULL==CImage::hDC)CImage::hDC=::CreateCompatibleDC(NULL);
if(NULL==CImage::hDC)return NULL;
if(m_bBitmapInvalid)
{
if(NULL!=m_hBitmap): eleteObject(m_hBitmap);
m_hBitmap=NULL;
if(NULL==(m_hBitmap=::CreateBitmap(m_W, m_H, 1, m_Type*8, m_pData)))return NULL;
m_bBitmapInvalid=false;
}
::SelectObject(CImage::hDC, m_hBitmap);
if(NULL!=CImage::pGDIPlusGrap)delete CImage::pGDIPlusGrap;
CImage::pGDIPlusGrap=NULL;
CImage::pGDIPlusGrap=new Graphics(CImage::hDC);
return CImage::pGDIPlusGrap;
}
void CGrap::CImage::EndGDIPlus()
{
if(NULL!=CImage::pGDIPlusGrap)delete CImage::pGDIPlusGrap;
CImage::pGDIPlusGrap=NULL;
}
用法:
CGrap::CImage img;
img.Create(8,8); //,CGrap::CImage::TYPE::RGBA,const_colors[CONST_COLOR::Blue].ColorValue
///*
Graphics *pGPG=img.BeginGDIPlus();
if(NULL!=pGPG)
{
//pGPG->DrawString(L"我是中国人", -1,&Font(L"宋体", 10),PointF(0, 0),&SolidBrush(Color::Red));
pGPG->DrawRectangle(& en(&SolidBrush(Color::Red)),0,0,4,4);
}
img.EndGDIPlus();
tex[0].Create(img);
结果GDI+什么也没绘制,跟踪进GDI+的代码,每一步都是成功的,可是监控m_pData所指向的内存区域,一个字节都没改变,后来改用GDI的函数也同样,不得其解? |
|