青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

CxImage與OpenGL結合

From:http://www.physdev.com/phpbb/cms_view_article.php?aid=30
關于CxImage的文章,網(wǎng)上有許多,這里只介紹如何把CxImage與OpenGL結合起來,用于讀入多種格式的紋理以及用來把屏幕保存為各種格式的圖像文件。

支持的格式有:BMP,GIF,ICO,JP2,FPC,FPG,PCX,PNG,PNM,RAS,TGA,TIF等等。

支持讀入透明紋理。

CxImage官方網(wǎng)站:
http://www.xdp.it/

//使用CxImage來為OpenGL讀入多種格式的紋理
//CxImage是一個開源的圖片處理函數(shù)庫,支持的文件格式有:
//CXIMAGE_FORMAT_BMP
//CXIMAGE_FORMAT_GIF
//CXIMAGE_FORMAT_ICO
//CXIMAGE_FORMAT_JP2
//CXIMAGE_FORMAT_JPC
//CXIMAGE_FORMAT_JPG
//CXIMAGE_FORMAT_PCX
//CXIMAGE_FORMAT_PGX
//CXIMAGE_FORMAT_PNG
//CXIMAGE_FORMAT_PNM
//CXIMAGE_FORMAT_RAS
//CXIMAGE_FORMAT_TGA
//CXIMAGE_FORMAT_TIF
//CXIMAGE_FORMAT_UNKNOWN
//CXIMAGE_FORMAT_WBMP
//CXIMAGE_FORMAT_WMF
//們知道OpenGL自帶有讀取圖形文件作紋理的函數(shù),但功能很弱,只支持BMP圖片
//如果要讀取其它格式的紋理,就需要用到第三方函數(shù)庫了。這里我們介紹CxImage
//CxImage下載:www.xdp.it
//以下代碼是用來讀取JPG文件的,緊供參考。

//讀入紋理,支持讀入一個alpha紋理,alpha紋理的大小必須與原圖一至。
//LoadTexture("pic.jpg",NULL,resultID); //讀入單個JPG圖片作紋理
//LoadTexture("pic.jpg","pic_alpha.jpg",resultID); //讀入一個紋理圖,及一個用于透明過濾的alpha圖
//LoadTexture("pic.png",NULL,resultID) //讀入一個自身帶有透明信息的圖片作紋理。

bool CCxImage_GLView::LoadTexture(const char *tex_name, const char *alpha_name, unsigned int &texID) 

   
// TODO: Add your command handler code here 
   CxImage image ,alpha,blendTex;// 


   unsigned 
char *pImage_RGBA = NULL; 


   
// Load the bitmap using the aux function stored in glaux.lib 
   
//pImage = auxDIBImageLoad(tex_name); 
   image.Load(tex_name); 
   
// Make sure valid image data was given to pImage, otherwise return false 
   if(!image.IsValid()) 
      
return false

   
int sizeX,sizeY; 
   sizeX 
= image.GetWidth(); 
   sizeY 
= image.GetHeight(); 

   
float texAspectRatio = (float)sizeX / (float)sizeY; 





   
if(alpha_name && strlen(alpha_name) > 0 ) 
   

         
int imageSize_RGB  = sizeX * sizeY * 3
         
int imageSize_RGBA = sizeX * sizeY * 4
         alpha.Load(alpha_name);    
         
if(!alpha.IsValid()) 
         

            
return false
         }
 
         
// allocate buffer for a RGBA image 
         pImage_RGBA = new unsigned char[imageSize_RGBA]; 
       

         RGBQUAD col_image,col_alpha; 
          
      
for(int y=0;y<sizeY;y++
         
for(int x=0;x<sizeX;x++
            

               col_image 
= image.GetPixelColor(x,y,false); 
               col_alpha 
= alpha.GetPixelColor(x,y,false); 
               pImage_RGBA[(x
+y*sizeX)*4 +0= col_image.rgbRed; 
               pImage_RGBA[(x
+y*sizeX)*4 +1= col_image.rgbGreen; 
               pImage_RGBA[(x
+y*sizeX)*4 +2= col_image.rgbBlue; 
               pImage_RGBA[(x
+y*sizeX)*4 +3= col_alpha.rgbRed; 
            }
 


          

         glGenTextures(
1&texID); 
         glBindTexture(GL_TEXTURE_2D, texID); 

         glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
         glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);    
         
// Don't forget to use GL_RGBA for our new image data we support Alpha transparency now! 
      
// Build Mipmaps (builds different versions of the picture for distances - looks better) 
         gluBuild2DMipmaps(GL_TEXTURE_2D, 4, sizeX, 
            sizeY, GL_RGBA, GL_UNSIGNED_BYTE, pImage_RGBA);    
      
if(pImage_RGBA) 
      

         delete [] pImage_RGBA; 
      }
 

   }
 
   
else if(image.AlphaIsValid()) 
   

         
int imageSize_RGB  = sizeX * sizeY * 3
         
long imageSize_RGBA = sizeX * sizeY * 4
         
// allocate buffer for a RGBA image 
      
//   pImage_RGBA = new unsigned char[imageSize_RGBA]; 

      image.Encode2RGBA(pImage_RGBA,imageSize_RGBA); 
       
      
// Generate a texture with the associative texture ID stored in the array 
      glGenTextures(1&texID); 
       
      
// This sets the alignment requirements for the start of each pixel row in memory. 
      
//   glPixelStorei (GL_UNPACK_ALIGNMENT, 1); 
       
      
// Bind the texture to the texture arrays index and init the texture 
      glBindTexture(GL_TEXTURE_2D, texID); 
       

      
//Assign the mip map levels and texture info 
      
//   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
      glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
      
// Build Mipmaps (builds different versions of the picture for distances - looks better) 
      gluBuild2DMipmaps(GL_TEXTURE_2D, 4, sizeX, 
            sizeY, GL_RGBA, GL_UNSIGNED_BYTE, pImage_RGBA);    
       
      image.FreeMemory( pImage_RGBA); 
   }
 
   
else 
   

      
// Generate a texture with the associative texture ID stored in the array 
      glGenTextures(1&texID); 
       
      
// This sets the alignment requirements for the start of each pixel row in memory. 
      
//   glPixelStorei (GL_UNPACK_ALIGNMENT, 1); 
       
      
// Bind the texture to the texture arrays index and init the texture 
      glBindTexture(GL_TEXTURE_2D, texID); 
       

      
//Assign the mip map levels and texture info 
      
//   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
      glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
      
// Build Mipmaps (builds different versions of the picture for distances - looks better) 
      gluBuild2DMipmaps(GL_TEXTURE_2D, 3, sizeX, 
         sizeY, GL_BGR_EXT, GL_UNSIGNED_BYTE, image.GetBits()); 
       
   }
 
   
//glEnable(GL_TEXTURE_2D); 
   
// Now we need to free the image data that we loaded since openGL stored it as a texture 





   
return true
}
 

//用來保存屏幕到圖像文件。
void CCxImage_GLView::OnSaveScene() 



   
// TODO: Add your command handler code here 
   static char BASED_CODE szFilter[] = "jpg Files (*.jpg)|*.jpg|bmp Files (*.bmp)|*.bmp|tga Files (*.tga)|*.tga|All Files (*.*)|*.*||"
  

   CString filename; 
    
   CString ext 
= ""

   
if(filename.IsEmpty()) 
      filename 
= "NoName"

   CFileDialog dlg(
false"jpg",filename, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter); 

   
if(dlg.DoModal() == IDOK) 
   


   ext 
= dlg.GetFileExt(); 
   filename 
= dlg.GetPathName(); 


      
//CDC* m_pDC;                  // Windows設備描述表 
      
//HGLRC m_hRC;               // OpenGL渲染描述表 

      
// TODO: Add your command handler code here 
      wglMakeCurrent(m_pDC->m_hDC,m_hRC); 
      
//這里要注意,如果就面渲染完畢的時候,調(diào)用了wglMakeCurrent(NULL,NULL);上面一行就一定要加上。 




      
int expand = 0
      
if((m_width *3)%4
         expand 
= 4 - (m_width*3)%4;   //保證位圖寬度能被4整除 
       
      
int mapSize = (m_width*3 +expand) * (m_height); 

      
if(mapSize == 0
         
return

      
//hDIB = (HGLOBAL) ::GlobalAlloc(GHND,mapSize); 
      unsigned char * pTmp = new BYTE[mapSize]; 

      
if(!pTmp) 
         
return ; 
      
// 讀取屏幕像素 
      glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
      glReadPixels(
00, m_width, m_height, GL_BGR_EXT, GL_UNSIGNED_BYTE, pTmp); 
   
//   glPixelStorei(GL_PACK_ALIGNMENT, 1); 



      
// BMP信息頭 
      CxImage image; 
      
//image.CreateFromHBITMAP(hbit); 
      image.CreateFromArray(pTmp,m_width,m_height,24,m_width*3 + expand,false); 
      image.SetJpegQuality(
98);      //指定JPG文件的質(zhì)量(0-100) 
       
      
if(ext == "jpb"
         image.Save(filename,CXIMAGE_FORMAT_JPG); 
      
else if(ext == "bmp"
         image.Save(filename,CXIMAGE_FORMAT_BMP); 
      
else if(ext == "tga"
         image.Save(filename,CXIMAGE_FORMAT_TGA); 

      
//pFile->Write(pTmp,mapSize*3); 



      delete[] pTmp; 

   }
 

    
}

posted on 2007-04-09 21:58 楊粼波 閱讀(1812) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            免费人成精品欧美精品| 亚洲福利视频在线| 亚洲视频中文字幕| 亚洲无玛一区| 亚洲欧美日韩精品久久久久| 亚洲欧美精品suv| 欧美影院视频| 久久久亚洲综合| 欧美国产第一页| 国产精品久久久久999| 国产伦精品一区二区三区视频孕妇 | 欧美成人日本| 欧美日韩在线不卡| 国产情人节一区| 91久久精品国产91性色tv| 一二三区精品| 久久激情五月丁香伊人| 欧美成人亚洲成人日韩成人| 亚洲美女在线观看| 欧美在线在线| 欧美私人网站| 亚洲国产美女| 欧美一区二区三区四区在线观看| 另类激情亚洲| 亚洲一区二区三区免费观看 | 欧美另类女人| 国产视频久久久久| 久久蜜臀精品av| 你懂的一区二区| 99在线观看免费视频精品观看| 亚洲欧美日韩区| 欧美激情精品久久久六区热门| 国产免费成人在线视频| 亚洲激情视频在线观看| 亚洲欧美精品suv| 欧美激情亚洲国产| 欧美中文字幕精品| 国产精品家教| 一区二区三区精品视频| 免费日韩精品中文字幕视频在线| 亚洲视频电影图片偷拍一区| 欧美阿v一级看视频| 国产视频久久久久| 欧美一区二区视频97| 亚洲精品小视频在线观看| 免费观看国产成人| 黄色成人免费观看| 久久久精品五月天| 亚洲欧美在线另类| 亚洲青涩在线| 欧美成人午夜影院| 欧美在线电影| 国产午夜精品久久久久久免费视 | 亚洲激情图片小说视频| 久久久久久久久久久久久9999| 国产精品高潮呻吟视频| 一区二区精品在线| 亚洲精品免费一二三区| 欧美 日韩 国产一区二区在线视频 | 久久久久久久一区二区三区| 亚洲一区二区三区免费在线观看| 欧美日韩一区二区免费视频| 亚洲美女网站| 91久久精品网| 欧美日韩精品久久| 亚洲一区图片| 午夜精品福利在线观看| 国产亚洲美州欧州综合国| 欧美在线视频免费| 久久精品中文字幕一区| 在线播放亚洲| 亚洲国产视频a| 欧美三区视频| 欧美专区第一页| 久久国产视频网站| 亚洲黄色免费| 99综合精品| 国产日本欧美视频| 美女免费视频一区| 欧美二区在线播放| 亚洲一区三区视频在线观看| 欧美在线欧美在线| 亚洲激情午夜| 夜夜嗨一区二区三区| 国产欧美成人| 欧美激情一区二区三区| 欧美少妇一区| 久热这里只精品99re8久| 美日韩在线观看| 亚洲尤物精选| 久久久久综合| 亚洲免费一级电影| 久久久亚洲精品一区二区三区| 99精品免费视频| 亚洲男人第一网站| 亚洲国产视频一区| 亚洲伊人观看| 亚洲免费av电影| 欧美一区日本一区韩国一区| 亚洲精品综合| 久久精品一区二区三区不卡牛牛| 亚洲毛片网站| 亚洲国产精品小视频| 免费在线日韩av| 亚洲精品乱码久久久久久蜜桃91 | 欧美三级第一页| 久久人人精品| 欧美色欧美亚洲另类七区| 久久亚洲电影| 国产精品超碰97尤物18| 欧美国产欧美综合| 国产日韩一区二区三区在线播放| 亚洲国产精品一区二区尤物区| 国产精品一区二区久久久| 亚洲国产精品一区在线观看不卡| 国产偷久久久精品专区| 亚洲毛片av在线| 91久久国产综合久久91精品网站 | 欧美日韩理论| 亚洲第一黄网| 激情成人中文字幕| 午夜激情一区| 新67194成人永久网站| 欧美区一区二区三区| 欧美激情亚洲国产| 亚洲福利视频二区| 久久中文精品| 欧美成人xxx| 亚洲福利在线视频| 久久免费国产精品1| 久久午夜电影| 在线播放豆国产99亚洲| 久久不射网站| 老司机午夜精品| 雨宫琴音一区二区在线| 久久亚洲不卡| 欧美黄色精品| 亚洲精品小视频在线观看| 麻豆成人在线播放| 亚洲第一色在线| av成人免费在线| 欧美日韩国产成人| 99国产精品一区| 亚洲专区一区| 国产欧美日韩精品a在线观看| 亚洲无线视频| 久久精品官网| 在线精品视频一区二区| 久久天天躁狠狠躁夜夜爽蜜月 | 亚洲午夜精品| 国产精品激情| 欧美在线视频播放| 你懂的视频欧美| 日韩视频专区| 欧美性一区二区| 午夜精品视频在线| 免费成人av资源网| 99国产精品久久久久久久| 欧美午夜电影在线| 小嫩嫩精品导航| 欧美激情第二页| 中日韩视频在线观看| 国产欧美精品日韩精品| 久久人人爽人人爽爽久久| 亚洲国产成人av| 亚洲网站啪啪| 久久久777| 亚洲国产成人精品女人久久久| 免费成人黄色| 一区二区三区免费在线观看| 欧美在线一二三| 亚洲日韩成人| 国产精品视频福利| 久久伊伊香蕉| 亚洲午夜未删减在线观看| 老司机午夜免费精品视频 | 韩国精品一区二区三区| 欧美国产精品va在线观看| 亚洲在线播放电影| 亚洲国产一二三| 久久久成人精品| 一区二区激情小说| 亚洲第一狼人社区| 国产精品久久夜| 免费久久99精品国产| 亚洲女性喷水在线观看一区| 亚洲成人在线视频播放 | 一本久久综合| 黑丝一区二区| 国产精品久久二区二区| 久久久人人人| 香蕉久久久久久久av网站| 日韩视频在线你懂得| 欧美v日韩v国产v| 欧美在线啊v一区| 亚洲图片欧洲图片av| 亚洲黄一区二区三区| 激情校园亚洲| 国内精品模特av私拍在线观看| 国产精品高潮在线|