游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4516|回复: 4

?GDI+?????DC???OpenGL????

[复制链接]

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
发表于 2011-6-29 00:37:00 | 显示全部楼层 |阅读模式
???????
//?????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(&ampen(&SolidBrush(Color::Red)),0,0,4,4);
        }
        img.EndGDIPlus();
        tex[0].Create(img);

    ??GDI+??????????GDI+?????????????????m_pData??????????????????????GDI????????????

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2011-6-29 01:02:00 | 显示全部楼层

Re:?GDI+?????DC???OpenGL????

????????????sandy_zc_1?????????DC?????API???????????????????????????????????sandy_zc_1????????????????MSDN??CreateBitmap?????????????????????????????????????????????????

????????CreateBitmap???????????????????????????????????????CreateBitmap????m_pRenderBuffer??????????????????????????m_pRenderBuffer??Create???Bitmap????
??????????@#?%%??%?#%#@?@%#?@

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2011-6-29 12:52:00 | 显示全部楼层

Re: ?GDI+?????DC???OpenGL????

?CreateDIBSection??????????CreateDIBSection???????Alpha??????GDI+?Alpha???
//?????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;
                BITMAPINFO bmpinfo;
                bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
                bmpinfo.bmiHeader.biWidth = m_W;
                bmpinfo.bmiHeader.biHeight = m_H;
                bmpinfo.bmiHeader.biPlanes = 1;
                bmpinfo.bmiHeader.biBitCount = 24;
                bmpinfo.bmiHeader.biCompression = BI_RGB;
                bmpinfo.bmiHeader.biSizeImage = 0;
                bmpinfo.bmiHeader.biXPelsPerMeter = 0;
                bmpinfo.bmiHeader.biYPelsPerMeter = 0;
                bmpinfo.bmiHeader.biClrUsed = 0;
                bmpinfo.bmiHeader.biClrImportant = 0;
                if(NULL==(m_hBitmap =::CreateDIBSection(hDC,&bmpinfo,DIB_RGB_COLORS,(void **)&m_pBitmapData,NULL,0)))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(COLORREF bkColor,CHANNEL keyChannel)
{
        if(NULL!=CImage::pGDIPlusGrap)delete CImage::pGDIPlusGrap;
        CImage::pGDIPlusGrap=NULL;
        long DIBPadBytes=IJL_DIB_PAD_BYTES(m_W,3);
        long j=0,i=0;
        keyChannel=keyChannel&3;
        switch(m_Type)
        {
                case TYPE::RGBA:
                        for(j=0;j<m_H;++j)
                        {
                                for(i=0;i<m_W;++i)
                                {
                                        if(GetR(bkColor)!=m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3]||
                                           GetG(bkColor)!=m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3+1]||
                                           GetB(bkColor)!=m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3+2])
                                        {       
                                                m_pData[(m_W*j+i)*4]  =m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3];
                                                m_pData[(m_W*j+i)*4+1]=m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3+1];
                                                m_pData[(m_W*j+i)*4+2]=m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3+2];
                                                m_pData[(m_W*j+i)*4+3]=255;
                                        }
                                }
                        }
                        break;
                case TYPE::ALPHA:
                        for(j=0;j<m_H;++j)
                        {
                                for(i=0;i<m_W;++i)
                                {
                                        m_pData[(m_W*j+i)]=m_pBitmapData[(m_W*3+DIBPadBytes)*j+i*3+keyChannel];                                       
                                }
                        }
        }
}

???DEMO???

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2011-6-29 12:59:00 | 显示全部楼层

Re: ?GDI+?????DC???OpenGL????

Demo

45

主题

157

帖子

169

积分

注册会员

Rank: 2

积分
169
QQ
 楼主| 发表于 2011-6-29 13:00:00 | 显示全部楼层

Re: ?GDI+?????DC???OpenGL????

Demo
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-10-13 11:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表