• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 8  文章 - 4  trackbacks - 0

            本程序只關注對Gif紋理的實現。不對GIF加解密進行詳細的說明。
            GIF文檔解析采用gif89a.h, gif89a.cpp實現。

            gif89a 代碼下載

            詳細紋理生成代碼:


            bool Cmenu::CreateTextureFromGif()
            {
                HRESULT hr;
              CGif89a
            * pGif    = new CGif89a();
                BOOL bopen 
            = pGif->open("110743081.gif",true);
                
                
            int index = 0;
                LPCFRAME pFrame    
            = pGif->getFrame(index);
                
            if (!pFrame)
                    
            return false;


                BYTE
            * pColorTable    = pGif->getColorTable(index);
                
            if (!pColorTable)
                    
            return false;

                
            //create empty Texture.
                hr = D3DXCreateTexture(m_pDevice,pFrame->imageWidth,pFrame->imageHeight,0,0,D3DFMT_X8B8G8R8,D3DPOOL_MANAGED,&m_pTexture[0]);
                
            if(FAILED(hr))
                    
            return false;

                D3DSURFACE_DESC textureDesc;
                m_pTexture[
            0]->GetLevelDesc(0,&textureDesc);

                
            if(textureDesc.Format != D3DFMT_X8B8G8R8)
                    
            return false;

                D3DLOCKED_RECT locketrect;
                hr 
            = m_pTexture[0]->LockRect( 0,&locketrect,0,0 );
                
            if(FAILED(hr))
                    
            return false;

                BYTE
            * pBytes = (BYTE*)locketrect.pBits;
                DWORD lPitch 
            = locketrect.Pitch;

                
            int idx_trs    = pFrame->ctrlExt.trsFlag ? pFrame->ctrlExt.trsColorIndex : -1;

                
            int x=0,y=0;
                
            int    sx, sy;
                
            if(x<0)
                    sx    
            = -x;
                
            else
                    sx    
            = 0;
                
            if(y<0)
                    sy    
            = -y;
                
            else
                    sy    
            = 0;


                DWORD width    
            = pFrame->imageWidth;

                pBytes 
            += lPitch*sy;
                
            for( DWORD h=sy; y+h<pFrame->imageHeight; h++ )
                
            {
                    DWORD
            * pDstData32 = ((DWORD*)pBytes) + sx;
                    WORD
            *  pDstData16 = ((WORD*)pBytes) + sx;
                    BYTE
            * pPixel;

                    BYTE* pIdx    = pFrame->dataBuf + (pFrame->imageWidth*(((y>0)?y:0)+h) + ((x>0)?x:0));

                    
            for( DWORD w=sx; w<width; w++ )
                    
            {
                        pPixel    
            = pColorTable + (*pIdx)*3;
                        
            if (*pIdx==idx_trs)
                        
            {
                            
            //if( 32 == ddsd.ddpfPixelFormat.dwRGBBitCount )
                            
            //    pDstData32[w] = 0;
                            
            //else
                            
            //    pDstData16[w] = 0;
                        }

                        
            else
                        
            {

                            DWORD m_nRShiftL 
            = 0; DWORD m_nRShiftR = 0;
                            DWORD m_nGShiftL 
            = 0; DWORD m_nGShiftR = 0;
                            DWORD m_nBShiftL 
            = 0; DWORD m_nBShiftR = 0;
                            DWORD m_nAShiftL 
            = 0; DWORD  m_nAShiftR = 0;

                            DWORD dr 
            = ((DWORD(pPixel[0])>>(m_nRShiftL))<<m_nRShiftR);
                            DWORD dg = ((DWORD(pPixel[1])>>(m_nGShiftL))<<8);
                            DWORD db = ((DWORD(pPixel[2])>>(m_nBShiftL))<<16);
                            DWORD da = ((0xff>>(m_nAShiftL))<<24);
              
                       pDstData32[w] = (DWORD)(dr+dg+db+da);
             

                        }

                        pIdx 
            ++;
                    }

                    
                    pBytes 
            += lPitch;
                }


                m_pTexture[
            0]->UnlockRect(0);
                
            return true;
            }
            如有任何疑問請留言。交流~~
            posted on 2009-04-04 01:05 Only Soft 閱讀(841) 評論(0)  編輯 收藏 引用 所屬分類: D3D
            青青草国产精品久久| 狠狠色伊人久久精品综合网| 精品久久久无码人妻中文字幕| 久久中文字幕人妻丝袜| 99久久99久久| 久久中文字幕人妻熟av女| 久久99国产精品久久99| 国内精品久久久久影院亚洲| 久久精品国产91久久综合麻豆自制 | 国产成人精品综合久久久| 久久国产精品无码网站| 久久婷婷激情综合色综合俺也去 | 日韩久久久久中文字幕人妻| 色婷婷综合久久久中文字幕| 久久天天躁狠狠躁夜夜av浪潮| 久久精品无码专区免费青青| 久久综合久久综合亚洲| 久久精品国产只有精品66| jizzjizz国产精品久久| 久久人人爽人人爽人人片AV麻烦| 久久噜噜电影你懂的| 国内精品久久久久久久97牛牛| 精品久久久久久国产| 亚洲?V乱码久久精品蜜桃| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 国产产无码乱码精品久久鸭| 久久久久久久精品成人热色戒| 国产福利电影一区二区三区久久老子无码午夜伦不 | 思思久久好好热精品国产| 久久99国产一区二区三区| 亚洲国产精久久久久久久| 粉嫩小泬无遮挡久久久久久| 久久A级毛片免费观看| 久久综合给合久久狠狠狠97色| 亚洲精品高清国产一线久久| 久久婷婷五月综合成人D啪| 久久人人爽人人爽人人片AV麻烦 | 中文字幕精品无码久久久久久3D日动漫 | 性高朝久久久久久久久久| 久久笫一福利免费导航 | 国产99久久久国产精品小说|