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

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::
用 Targa(TGA) 圖像文件,因為它簡單并且支持 alpha 通道,它可以使你更容易的創建酷的效果。
TGA 文件與 BMP 文件一樣,圖像數據都是按 BGR 存儲,而 OpenGL 的圖像是按 RGB 來使用的。
這里用了一個很好的方法,一次性讀入所有的圖像數據,然后再進行轉換 R 與 B,而不是每次讀一個 R,G,B,A,這種讀法很省時間。fread(buffer, size, number, file);按塊讀取文件內容
size 為每次讀取幾個 byte,如按字節讀取,這里使用的一樣,size == 1;
number 為一共讀取多少個 size 的內容,number = width * height * bytesPerPixel;(整個圖像的數據內容)
這個方法只能讀取無壓縮的 TGA 文件
TGA 開始為 12 字節的內容為描述文件的一般信息,接下來的 6 字節為最重要的信息,文件寬,高,每個像素的位數, 從第 18 個字節開始,就是圖像的數據內容。
更重要的一點,這個程序進行了各種出錯處理。
 
#ifndef _TGALOAD_H_
#define _TGALOAD_H_
#include <stdio.h>
 
typedef struct {
       GLubyte* data;
        GLuint width;
        GLuint height;
        GLuint rgbType;
} TextureImage;
 
GLboolean loadTGA(char* fileName, TextureImage* textureImage) {
        GLubyte TGAheader[12]= { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // 無壓縮的TGA文件頭
        GLubyte TGAcompare[12]; // 保存讀入的文件頭信息
        GLubyte header[6]; // 保存最有用的圖像信息,寬,高,位深
        GLuint bytesPerPixel; // 記錄每個顏色所占用的字節數
        GLuint imageSize; // 記錄文件大小
        GLuint temp; 
// 臨時變量
 
        FILE *file = fopen(fileName, "rb"); // 打開一個TGA文件
        if (file==NULL || // 文件存在么?
                      fread(TGAcompare, 1, sizeof(TGAcompare), file)!= sizeof(TGAcompare) ||
                      // 是否包含12個字節的文件頭?
                      memcmp(TGAheader, TGAcompare, sizeof(TGAheader))!= 0 ||
                      // 是否是我們需要的格式?
                      fread(header, 1, sizeof(header), file)!= sizeof(header)) {
                      // 如果是讀取下面六個圖像信息
                if (file == NULL) // 文件不存在返回錯誤
                        return false;
                else {
                        fclose(file); // 關閉文件返回錯誤
                        return false;
                }
        }
 
        textureImage->width = header[1] * 256 + header[0]; // 記錄文件寬度
        textureImage->height = header[3] * 256 + header[2]; 
// 記錄文件高度
        if (textureImage->width <= 0 || // 寬度是否小于0
                      textureImage->height <= 0 || // 高度是否小于0
                      (header[4] != 24 && header[4] != 32)) { // TGA文件是24/32位?
                fclose(file); // 如果失敗關閉文件,返回錯誤
                return false;
        }
        bytesPerPixel = header[4] >> 3; // 記錄每個象素所占的字節數
        textureImage->rgbType = bytesPerPixel; // 記錄每個象素所占的字節數
 
        imageSize = textureImage->width *textureImage->height * bytesPerPixel;
        // 計算TGA文件加載所需要的內存大小
        textureImage->data = (GLubyte*)malloc(imageSize); // 分配內存去保存TGA數據
        if (textureImage->data == NULL || // 系統是否分配了足夠的內存?
                      fread(textureImage->data, 1, imageSize, file)!= imageSize) {
                      // 是否成功讀入內存?
                if (textureImage->data != NULL) { // 是否有數據被加載
                        free(textureImage->data); // 如果是,則釋放載入的數據
                }
                fclose(file); // 關閉文件
                return false; // 返回錯誤
        }
 
        for (GLuint i=0; i<GLuint(imageSize); i+=bytesPerPixel) {
                // 循環所有的像素
                // 交換R和B的值
                temp = textureImage->data[i];
                textureImage->data[i] = textureImage->data[i + 2];
                textureImage->data[i + 2] = temp;
        }
 
        fclose(file); // 關閉文件
        
return true;
}
 
#endif
 
posted on 2010-12-17 17:32 逛奔的蝸牛 閱讀(630) 評論(0)  編輯 收藏 引用 所屬分類: OpenGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美激情第3页| 国产欧美视频一区二区| 国内精品久久久久影院色| 久久国产手机看片| 性欧美videos另类喷潮| 国产一区二区三区高清| 欧美成人久久| 欧美日韩视频在线| 亚洲欧美久久久久一区二区三区| 亚洲狼人综合| 国产日韩1区| 欧美mv日韩mv国产网站app| 欧美激情1区| 午夜精品区一区二区三| 久久国产夜色精品鲁鲁99| 久久久久网址| 亚洲精品久久久久久久久久久久| 亚洲高清av在线| 欧美色精品天天在线观看视频| 欧美一区=区| 日韩小视频在线观看专区| 99在线精品视频在线观看| 国产视频一区在线| 欧美激情国产日韩| 国产欧美一区二区三区国产幕精品| 毛片精品免费在线观看| 欧美精品成人一区二区在线观看| 香蕉久久一区二区不卡无毒影院 | 亚洲欧美福利一区二区| 西瓜成人精品人成网站| 91久久精品国产91久久| 午夜精品视频| 国产精品99久久不卡二区| 亚洲第一黄色网| 国产精品久久久久久久app| 麻豆亚洲精品| 国产精品视屏| 亚洲精品日韩综合观看成人91| 国产小视频国产精品| 日韩一本二本av| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲网站视频| 亚洲精品一区在线观看| 欧美在线首页| 欧美亚洲尤物久久| 欧美三区在线视频| 欧美顶级艳妇交换群宴| 国产综合视频| 亚洲自拍三区| 午夜伦理片一区| 欧美日一区二区在线观看| 欧美大学生性色视频| 国内精品久久久久影院优| 亚洲视频一区二区在线观看| 99精品国产在热久久| 久久婷婷国产综合精品青草| 久久精品成人一区二区三区| 国产精品美女久久久免费| 99国产精品自拍| 一区二区三区视频在线| 欧美久久久久久久久久| 亚洲国产你懂的| 亚洲精品一线二线三线无人区| 久久久久久九九九九| 久久综合久久综合这里只有精品 | 黄色小说综合网站| 欧美一区二区三区在线| 久久精品中文| 一区三区视频| 久久综合国产精品| 亚洲东热激情| 中文一区字幕| 国产精品女主播在线观看| 亚洲欧美www| 久久久蜜臀国产一区二区| 国产色爱av资源综合区| 久久国产精品色婷婷| 狂野欧美一区| 亚洲日本免费电影| 欧美日韩亚洲91| 亚洲尤物在线| 美女任你摸久久| 亚洲精品极品| 国产精品久久久亚洲一区 | 亚洲精品视频在线看| 亚洲图片欧洲图片av| 国产精品免费小视频| 久久国内精品视频| 欧美成人一区二区| 一本久久综合亚洲鲁鲁| 国产精品国产三级国产普通话三级| 亚洲综合色丁香婷婷六月图片| 久久久久久久久综合| 亚洲欧洲精品成人久久奇米网 | 欧美一区深夜视频| 欧美91大片| 亚洲一区二区三区在线观看视频| 国产日韩一区二区三区在线播放| 久久阴道视频| 一区二区日本视频| 另类专区欧美制服同性| av成人免费观看| 国外视频精品毛片| 欧美激情一区二区三区在线视频观看| 一区二区三区日韩精品| 欧美成人一区二区在线| 亚洲综合社区| 91久久精品久久国产性色也91| 国产精品国产精品| 免费亚洲电影在线观看| 亚洲综合精品四区| 亚洲精品综合久久中文字幕| 久久综合色一综合色88| 亚洲在线一区| 亚洲精品麻豆| 在线观看三级视频欧美| 国产精品一区二区三区久久久| 一区二区三区欧美| 欧美高潮视频| 久久午夜视频| 久久本道综合色狠狠五月| 一区二区高清| 亚洲精品免费一区二区三区| 国产最新精品精品你懂的| 国产精品久久久久7777婷婷| 欧美电影美腿模特1979在线看| 久久爱另类一区二区小说| 亚洲午夜久久久久久久久电影院| 亚洲国产成人久久| 欧美a级在线| 狂野欧美一区| 久久这里只有| 久久久久一区二区| 久久久www| 久久精品成人| 久久精品理论片| 久久av一区二区三区| 先锋影音久久久| 校园激情久久| 香蕉久久国产| 久久久精品国产免费观看同学 | 在线国产亚洲欧美| 欧美日本三区| 欧美日韩国内| 久久精品九九| 久久久夜夜夜| 久久综合久色欧美综合狠狠| 久久久久久一区二区三区| 久久久久久久91| 另类图片综合电影| 欧美精品免费观看二区| 欧美精品成人91久久久久久久| 欧美精品一区二区三区高清aⅴ| 欧美mv日韩mv国产网站app| 欧美a级大片| 欧美日韩中文另类| 国产精品丝袜白浆摸在线| 国产欧美日韩视频一区二区三区| 国产丝袜美腿一区二区三区| 国产主播精品在线| 91久久精品国产91久久性色tv| 999亚洲国产精| 午夜精品久久99蜜桃的功能介绍| 欧美一区在线看| 毛片av中文字幕一区二区| 亚洲人久久久| 午夜精品福利在线观看| 久久中文精品| 欧美午夜不卡在线观看免费| 国产目拍亚洲精品99久久精品| 狠狠爱成人网| 一本色道婷婷久久欧美| 欧美亚洲在线| 亚洲国内精品在线| 亚洲综合久久久久| 免费视频亚洲| 国产美女搞久久| 91久久精品美女高潮| 亚洲欧美99| 欧美大片va欧美在线播放| 一本在线高清不卡dvd| 久久精品首页| 国产精品国产亚洲精品看不卡15| 国语精品中文字幕| 亚洲专区免费| 欧美国产日本在线| 亚洲欧美日韩区| 欧美激情影音先锋| 韩国精品在线观看| 亚洲影院色无极综合| 农村妇女精品| 欧美一区二区在线观看| 欧美日韩在线不卡一区| 今天的高清视频免费播放成人| 亚洲午夜久久久久久久久电影网| 媚黑女一区二区| 亚洲欧美中日韩| 国产精品白丝黑袜喷水久久久| 亚洲激情在线观看| 免费看的黄色欧美网站|