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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(1816) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            老色鬼精品视频在线观看播放| 亚洲免费电影在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 午夜精品一区二区三区四区| 亚洲精品免费看| 久久久国产成人精品| 亚洲一区亚洲| 欧美日韩国产高清视频| 欧美国产先锋| 国语自产偷拍精品视频偷| 亚洲午夜电影| 亚洲午夜成aⅴ人片| 欧美高清视频在线播放| 女同性一区二区三区人了人一 | 欧美日韩亚洲一区二区三区四区| 美女任你摸久久| 国内精品久久久久久| 午夜在线成人av| 欧美在线一区二区| 国产精品99久久不卡二区| 亚洲巨乳在线| 欧美国产日韩精品免费观看| 欧美激情1区2区3区| 在线播放国产一区中文字幕剧情欧美| 午夜激情亚洲| 欧美一级视频| 国产无一区二区| 久久国产高清| 美女视频一区免费观看| 伊人久久综合97精品| 久久久国产亚洲精品| 你懂的成人av| 最新成人在线| 久久婷婷激情| 伊人久久噜噜噜躁狠狠躁 | 欧美日本中文| 亚洲精品日韩一| 亚洲字幕一区二区| 国产农村妇女精品一区二区| 欧美有码在线观看视频| 免费国产自线拍一欧美视频| 亚洲精品自在在线观看| 欧美日韩精品一区二区三区| 亚洲丝袜av一区| 久久精品一区二区国产| 精品成人在线| 欧美大片在线看| 日韩一本二本av| 午夜在线一区| 亚洲福利专区| 欧美日韩黄视频| 欧美一区二区在线免费播放| 日韩亚洲视频在线| 欧美午夜一区二区| 久久99伊人| 亚洲精品免费网站| 亚洲欧美日韩国产综合在线| 国产一区二区久久久| 欧美大秀在线观看| 99在线精品视频在线观看| 久久精品国产一区二区三区免费看 | 亚洲免费视频一区二区| 国内成+人亚洲| 欧美日韩1区| 久久精品午夜| 一本色道久久综合亚洲精品不| 久久久久国产精品一区三寸| 亚洲精品在线二区| 国产一区999| 欧美母乳在线| 久久成人在线| 亚洲作爱视频| 欧美成人免费播放| 性久久久久久久久久久久| 亚洲激情在线激情| 国产精品色婷婷久久58| 欧美韩国日本综合| 欧美与欧洲交xxxx免费观看| 亚洲精品乱码久久久久久黑人| 久久久久看片| 亚洲亚洲精品在线观看| 91久久精品国产91性色tv| 国产区精品视频| 欧美视频成人| 欧美美女bbbb| 久久综合久久久久88| 欧美一区二区三区男人的天堂| 亚洲精品视频一区| 欧美激情国产高清| 久久婷婷久久| 久久久久一区二区三区四区| 亚洲女同在线| 亚洲一区3d动漫同人无遮挡| 99综合在线| 亚洲裸体俱乐部裸体舞表演av| 好吊视频一区二区三区四区| 国产日韩一区二区三区在线| 国产精品人人爽人人做我的可爱| 欧美精品在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲国产福利在线| 黄色成人在线网址| 国产字幕视频一区二区| 国产区二精品视| 国产视频不卡| 国产一区二区精品久久91| 国产美女精品视频免费观看| 国产精品一区视频网站| 国产精品美女久久久久av超清| 欧美日韩亚洲高清| 欧美视频精品一区| 国产精品久久久亚洲一区 | 麻豆精品一区二区综合av| 久久久国产精品一区| 久久九九有精品国产23| 久久久久久高潮国产精品视| 久久婷婷蜜乳一本欲蜜臀| 久久视频在线免费观看| 久久综合色8888| 欧美黄色视屏| 亚洲美女91| 亚洲一区二区三区免费在线观看 | 欧美黑人多人双交| 欧美连裤袜在线视频| 欧美日韩中文字幕在线视频| 国产精品久久久久久久久搜平片 | 亚洲福利视频网站| 亚洲人成精品久久久久| av72成人在线| 午夜老司机精品| 久久久成人精品| 亚洲国产高潮在线观看| 亚洲美女在线视频| 亚洲免费影视| 久久亚洲综合网| 欧美三级在线| 国产一区二区电影在线观看| 在线看国产日韩| 一区二区精品| 久久精品视频网| 亚洲激情视频| 午夜视频久久久| 美女黄色成人网| 国产精品高潮呻吟久久av无限| 国产色爱av资源综合区| 亚洲精品美女免费| 亚洲已满18点击进入久久| 久久精品日韩欧美| 亚洲欧洲三级电影| 亚欧成人精品| 欧美日韩高清在线观看| 黑丝一区二区三区| 日韩视频一区二区三区在线播放免费观看 | 一本色道久久99精品综合| 欧美一二三区精品| 亚洲国产另类久久精品| 亚洲欧美日韩在线观看a三区| 欧美成年人网站| 国产三级欧美三级| 亚洲图片欧洲图片av| 亚洲成人中文| 久久成人国产精品| 亚洲精品免费在线| 久久裸体视频| 国产精品一区二区在线观看| 亚洲美女av黄| 久热re这里精品视频在线6| 中文亚洲欧美| 欧美日韩成人综合在线一区二区 | 美女露胸一区二区三区| 国产日韩欧美麻豆| 亚洲一区二区三区色| 亚洲国产合集| 蜜桃精品一区二区三区| 国产一区二区三区奇米久涩| 亚洲综合色丁香婷婷六月图片| 亚洲电影在线看| 美女脱光内衣内裤视频久久网站| 国产欧美日韩高清| 亚洲综合电影| aa亚洲婷婷| 欧美精品综合| 一本色道久久综合亚洲二区三区| 欧美刺激午夜性久久久久久久| 久久国产毛片| 国产一区二区三区久久悠悠色av | 亚洲尤物影院| 欧美天天影院| 亚洲在线一区| 一本久久知道综合久久| 欧美日韩在线直播| 在线中文字幕一区| 91久久国产自产拍夜夜嗨| 男男成人高潮片免费网站| 亚洲国产欧美一区| 亚洲风情亚aⅴ在线发布| 久久综合免费视频影院| 亚洲国产成人91精品| 欧美激情第9页| 欧美激情精品久久久久久免费印度|