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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            国产午夜精品一区二区三区视频| 午夜精品美女久久久久av福利| 宅男噜噜噜66一区二区 | 欧美日韩激情网| 欧美国产先锋| 欧美视频一区二区三区四区| 国产精品成人免费视频| 国产精品成人免费精品自在线观看| 国产精品久久久久三级| 国产欧美日韩另类视频免费观看| 国产欧美日韩不卡| 亚洲国产成人av在线| 99re66热这里只有精品4| 亚洲一区二区精品视频| 久久国产精品久久w女人spa| 欧美大片在线观看一区| 99综合在线| 久久精品卡一| 欧美日韩另类在线| 国产性做久久久久久| 亚洲精品在线二区| 欧美影院午夜播放| 亚洲国内欧美| 午夜精品久久久久久久久久久| 久久综合五月| 国产精品永久免费观看| 亚洲精品国产精品国自产在线| 亚洲女爱视频在线| 欧美黄色精品| 午夜一区在线| 国产精品99免视看9| 亚洲国产精品久久久久| 午夜精品亚洲| 亚洲激情一区| 久久久久久久久蜜桃| 国产精品久久久久久av下载红粉 | 亚洲高清在线| 一区二区三区视频观看| 欧美大色视频| 亚洲国产专区校园欧美| 麻豆精品传媒视频| 欧美国产日韩一区二区| 亚洲黄色在线看| 亚洲在线网站| 免费看成人av| 在线观看视频一区| 在线视频亚洲欧美| 久久精品亚洲乱码伦伦中文 | 亚洲电影自拍| 亚洲视频一区二区| 久久综合久久综合久久综合| 欧美日韩一区二区三| 亚洲国产老妈| 久久久久久9999| 亚洲欧美精品中文字幕在线| 欧美久久婷婷综合色| 国内精品福利| 一区二区欧美在线| 一本色道久久99精品综合| 免费日韩av片| 亚洲激情小视频| 久久亚洲精品欧美| 久久久久久国产精品mv| 国产精品自拍三区| 午夜视频一区二区| 午夜国产精品影院在线观看 | 国外成人网址| 麻豆成人在线播放| 麻豆久久婷婷| 99视频精品免费观看| 亚洲人成绝费网站色www| 欧美大色视频| 亚洲欧美日本伦理| 亚洲直播在线一区| 激情欧美一区二区三区| 欧美国产日本高清在线| 欧美精品少妇一区二区三区| 在线亚洲免费| 性做久久久久久久免费看| 国语自产在线不卡| 欧美激情第8页| 国产精品国产三级国产aⅴ9色| 欧美在线在线| 能在线观看的日韩av| 亚洲午夜国产一区99re久久 | 欧美日韩第一页| 日韩视频免费在线观看| 在线亚洲一区二区| 国产一区二区三区久久| 欧美韩日高清| 国产精品户外野外| 久久久精品国产免费观看同学| 久久亚洲春色中文字幕| 亚洲午夜精品久久久久久app| 午夜在线观看免费一区| 亚洲黄色免费电影| 亚洲综合色婷婷| 亚洲精品美女91| 亚洲欧美日韩综合国产aⅴ| 亚洲国产日日夜夜| 亚洲欧美日韩国产精品| 亚洲伦理精品| 欧美在线观看一二区| 亚洲一区www| 美女爽到呻吟久久久久| 亚洲一区综合| 欧美成人一区在线| 久久久久久久精| 欧美午夜精品伦理| 欧美国产精品专区| 国产亚洲午夜| 在线综合亚洲| 99视频精品免费观看| 久久精品国产精品亚洲综合| 在线亚洲欧美视频| 免费久久99精品国产自在现线| 久久精品一本| 国产精自产拍久久久久久蜜| 亚洲精品视频在线| 亚洲国产cao| 久久久久五月天| 久久九九国产精品| 国产精品一区一区| 亚洲午夜激情在线| 国产精品99久久久久久白浆小说 | 欧美激情一区二区三区四区| 国产一区二区三区久久| 亚洲欧美日韩精品久久奇米色影视| 99精品免费视频| 欧美精品一区二区三区蜜桃 | 久久国产精品一区二区| 久久国产精品久久w女人spa| 国产精品久久亚洲7777| 在线一区二区日韩| 亚洲欧美清纯在线制服| 国产精品久久久久久久午夜片| 夜夜嗨av一区二区三区四区| 亚洲视频在线观看| 国产精品久久久久久五月尺| 一本色道久久综合亚洲精品高清| 日韩一区二区精品| 欧美日韩国产一区二区三区地区 | 免费av成人在线| 久久精品av麻豆的观看方式| 欧美电影免费观看高清| 欧美成人免费大片| 亚洲激情专区| 欧美日本韩国一区二区三区| 亚洲清纯自拍| 亚洲欧美另类久久久精品2019| 国产精品久久久久9999| 国产精品99久久不卡二区| 亚洲欧美精品在线| 国产综合视频在线观看| 每日更新成人在线视频| 日韩视频欧美视频| 午夜精品久久久| 韩国精品一区二区三区| 欧美成人性生活| 亚洲午夜羞羞片| 久久精品久久综合| 黄色资源网久久资源365| 免费在线欧美视频| 亚洲精品国产精品国自产观看| 亚洲欧美在线另类| 亚洲大片免费看| 欧美日韩国产精品一区二区亚洲| 正在播放欧美视频| 久久在精品线影院精品国产| 日韩视频三区| 国内精品国语自产拍在线观看| 欧美成人精品一区二区三区| 亚洲四色影视在线观看| 久久夜精品va视频免费观看| 亚洲视频欧洲视频| 玉米视频成人免费看| 欧美性大战xxxxx久久久| 欧美在线电影| 亚洲乱码久久| 榴莲视频成人在线观看| 在线午夜精品自拍| 影音先锋日韩有码| 国产精品久久久久久久7电影| 久久久久国产精品一区三寸| 亚洲视频欧美在线| 亚洲第一精品夜夜躁人人躁 | 亚洲电影av在线| 久久精品国产第一区二区三区最新章节 | 欧美诱惑福利视频| 一本色道久久综合一区| 国内一区二区在线视频观看| 欧美午夜宅男影院| 欧美成人免费在线观看| 久久久久久久性| 亚洲欧美色一区| 日韩午夜视频在线观看| 亚洲电影免费观看高清完整版| 久久婷婷蜜乳一本欲蜜臀| 欧美一区二区三区四区夜夜大片| 一本大道久久精品懂色aⅴ |