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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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的文章,網上有許多,這里只介紹如何把CxImage與OpenGL結合起來,用于讀入多種格式的紋理以及用來把屏幕保存為各種格式的圖像文件。

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

支持讀入透明紋理。

CxImage官方網站:
http://www.xdp.it/

//使用CxImage來為OpenGL讀入多種格式的紋理
//CxImage是一個開源的圖片處理函數庫,支持的文件格式有:
//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自帶有讀取圖形文件作紋理的函數,但功能很弱,只支持BMP圖片
//如果要讀取其它格式的紋理,就需要用到第三方函數庫了。這里我們介紹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); 
      
//這里要注意,如果就面渲染完畢的時候,調用了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文件的質量(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>
            久久麻豆一区二区| 久久一区亚洲| 国产亚洲一区二区精品| 91久久国产精品91久久性色| 亚洲精品一区二区三区四区高清| 国产欧美日韩综合一区在线观看 | 久久久久久成人| 久久精品国产欧美亚洲人人爽| 欧美一级视频免费在线观看| 午夜视频一区| 久久久久久久一区| 欧美成人在线影院| 亚洲九九九在线观看| 亚洲视频专区在线| 欧美一区三区三区高中清蜜桃| 久久er精品视频| 欧美第十八页| 国产乱码精品一区二区三区忘忧草 | 久久激情五月婷婷| 欧美大片在线影院| 一级日韩一区在线观看| 小嫩嫩精品导航| 欧美成人亚洲成人| 国产伦精品一区二区三区四区免费 | 久久久久**毛片大全| 欧美成年人网| 在线亚洲+欧美+日本专区| 欧美在线视频日韩| 欧美日韩一区二区三区四区五区| 国产欧美一区二区精品性色| 亚洲激情不卡| 久久精品国产欧美亚洲人人爽| 亚洲精品久久久久| 久久黄色网页| 国产精品久久午夜| 亚洲肉体裸体xxxx137| 欧美一区二区三区电影在线观看| 欧美成人日韩| 欧美一级电影久久| 欧美三日本三级少妇三2023| 在线观看91精品国产麻豆| 欧美日韩网址| 永久免费视频成人| 欧美亚洲视频在线观看| 亚洲国产欧美一区| 久久精品国产第一区二区三区| 国产精品av久久久久久麻豆网| 亚洲国产精品视频一区| 久久精品国产综合| 亚洲女女做受ⅹxx高潮| 欧美日韩免费网站| 99精品热视频只有精品10| 欧美成人午夜激情视频| 欧美亚洲一区二区在线观看| 国产精品久久福利| 亚洲私人黄色宅男| 99re亚洲国产精品| 欧美日韩国产bt| 亚洲乱码国产乱码精品精98午夜| 蜜桃av一区| 久久精品国产欧美激情| 国内久久婷婷综合| 久久综合九色综合久99| 欧美亚洲在线| 激情av一区| 麻豆精品一区二区av白丝在线| 欧美怡红院视频一区二区三区| 国产欧美一区二区精品性色| 久久国产精品72免费观看| 亚洲男人第一av网站| 国产欧美日本在线| 久久精品国产77777蜜臀 | 妖精成人www高清在线观看| 欧美激情一区二区三区蜜桃视频| 91久久黄色| 亚洲伦理在线| 国产精品无码永久免费888| 午夜视频在线观看一区二区三区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久亚洲高清| 尤妮丝一区二区裸体视频| 麻豆精品精华液| 欧美福利电影在线观看| 一本色道久久综合| 亚洲伊人久久综合| 在线成人h网| 亚洲精品三级| 国产区精品视频| 欧美国产极速在线| 国产精品v欧美精品v日韩| 久久久精品日韩| 欧美精品xxxxbbbb| 欧美一区三区二区在线观看| 欧美激情一区二区| 欧美日韩国产免费观看| 午夜欧美精品久久久久久久| 久久aⅴ国产欧美74aaa| 日韩视频一区| 欧美亚洲三级| 亚洲视频电影在线| 久久久久久久999精品视频| 日韩午夜中文字幕| 欧美亚洲在线播放| 亚洲视频自拍偷拍| 久久伊人免费视频| 午夜在线不卡| 欧美精品高清视频| 久久噜噜噜精品国产亚洲综合| 欧美激情性爽国产精品17p| 香港久久久电影| 欧美顶级艳妇交换群宴| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩www| 欧美黄污视频| 国语精品中文字幕| 亚洲午夜一区| 一区二区三区黄色| 欧美成人综合网站| 老牛嫩草一区二区三区日本| 国产精品www网站| 亚洲国产精品热久久| 国产一区二区三区久久久久久久久 | 欧美成人xxx| 久久久久久久高潮| 国产精品亚洲网站| 99在线精品观看| 亚洲精品一区二区在线观看| 久久av一区二区| 久久精品日韩欧美| 国产女人aaa级久久久级| 一本色道久久综合亚洲精品按摩| 亚洲三级视频| 欧美大片一区二区三区| 欧美黑人国产人伦爽爽爽| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲欧美高清| 欧美亚洲综合另类| 国产美女扒开尿口久久久| 亚洲私人影院在线观看| 亚洲视屏在线播放| 国产精品久久久久一区| 一区二区三区视频在线 | 欧美~级网站不卡| 在线观看视频日韩| 久久久精品国产一区二区三区| 久久久久高清| 在线视频国内自拍亚洲视频| 免费不卡欧美自拍视频| 亚洲电影激情视频网站| 亚洲精品免费在线观看| 欧美电影在线播放| 一区二区欧美精品| 欧美一级专区免费大片| 国产亚洲激情在线| 老牛嫩草一区二区三区日本| 亚洲国产精品久久人人爱蜜臀| 在线一区欧美| 国产视频综合在线| 欧美高清在线视频观看不卡| 在线免费不卡视频| 欧美激情中文字幕一区二区| 999亚洲国产精| 久久精品理论片| 亚洲高清一二三区| 欧美日韩一区二区三区在线看| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲国产精品日韩| 欧美日韩国产综合视频在线观看 | 亚洲视频欧美视频| 国产毛片久久| 欧美国产日韩一区二区三区| 一本久久a久久精品亚洲| 久久精品成人一区二区三区| 亚洲人成7777| 国产精品亚洲综合色区韩国| 久久精品五月| 制服丝袜激情欧洲亚洲| 巨乳诱惑日韩免费av| 一本久久综合亚洲鲁鲁五月天| 国产精品永久免费观看| 免费短视频成人日韩| 亚洲一区二区三| 欧美福利一区二区| 欧美一级大片在线免费观看| 91久久精品国产| 国产精品一页| 欧美视频日韩视频| 另类专区欧美制服同性| 亚洲综合好骚| 亚洲精品综合| 欧美福利视频| 老色批av在线精品| 香蕉久久夜色精品国产使用方法| 亚洲国产欧洲综合997久久| 国产欧美一区二区三区视频| 欧美精品乱人伦久久久久久 | 久久人91精品久久久久久不卡| 日韩一二三在线视频播| 欧美激情精品久久久久久久变态 | 99精品欧美|