• <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>

            逛奔的蝸牛

            我不聰明,但我會(huì)很努力

               ::  :: 新隨筆 ::  ::  :: 管理 ::
            這個(gè)代碼寫(xiě)得有些阿格里拉,但也不失為一種方法
             
            #ifndef _BMPLOAD_H_
            #define _BMPLOAD_H_
            #include <iostream>
            #include <stdio.h>
            using namespace std;
             
            /*------------- 
             類(lèi)型定義
             --------------*/
            // 紋理圖像結(jié)構(gòu)
            typedef struct {
                     int imgWidth; // 紋理寬度
                     int imgHeight; // 紋理高度
                     unsigned int rgbType; // 每個(gè)象素對(duì)應(yīng)的字節(jié)數(shù),3:24位圖,4:帶alpha通道的24位圖
                     unsigned char *data; // 紋理數(shù)據(jù)
            } TEXTUREIMAGE;
             
            // BMP文件頭
            typedef struct {
                     unsigned short bfType; // 文件類(lèi)型
                     unsigned long bfSize; // 文件大小
                     unsigned short bfReserved1; // 保留位
                     unsigned short bfReserved2; // 保留位
                     unsigned long bfOffBits; // 數(shù)據(jù)偏移位置
            } BMPFILEHEADER;
             
            // BMP信息頭
            typedef struct {
                     unsigned long biSize; // 此結(jié)構(gòu)大小
                     long biWidth; // 圖像寬度
                     long biHeight; // 圖像高度
                     unsigned short biPlanes; // 調(diào)色板數(shù)量
                     unsigned short biBitCount; // 每個(gè)象素對(duì)應(yīng)的位數(shù),24:24位圖,32:帶alpha通道的24位圖
                     unsigned long biCompression; // 壓縮
                     unsigned long biSizeImage; // 圖像大小
                     long biXPelsPerMeter; // 橫向分辨率
                     long biYPelsPerMeter; // 縱向分辨率
                     unsigned long biClrUsed; // 顏色使用數(shù)
                     unsigned long biClrImportant; // 重要顏色數(shù)
            } BMPINFOHEADER;
             
            // 讀取BMP文件創(chuàng)建紋理
            GLboolean LoadBmp(char *filename, TEXTUREIMAGE *textureImg) {
                     int i, j;
                     FILE *file;
                     BMPFILEHEADER bmpFile;
                     BMPINFOHEADER bmpInfo;
                     int pixel_size;
             
                     // 初始化紋理數(shù)據(jù)
                     textureImg->imgWidth = 0;
                     textureImg->imgHeight = 0;
                     textureImg->rgbType = 0;
                     if (textureImg->data != NULL) {
                              delete []textureImg->data;
                     }
             
                     // 打開(kāi)文件
                     file = fopen(filename, "rb");
                     if (file == NULL) {
                              cout << "Open File Error" <<endl;
                              return false;
                     }
             
                     // 獲取文件頭
                     rewind(file);
                     fread(&bmpFile, sizeof(BMPFILEHEADER)-2, 1, file);
                     //因?yàn)椋谜Z(yǔ)言對(duì)結(jié)構(gòu)按四位對(duì)齊,所以不能直接用sizeof(BMPFILEHEADER)
                     fread(&bmpInfo, sizeof(BMPINFOHEADER), 1, file);
                     // 驗(yàn)證文件類(lèi)型
                     if (bmpFile.bfType != 0x4D42) {
                             cout << "File Type Error" <<endl;
                             fclose(file);
                             return false;
                     }
             
                     // 獲取圖像色彩數(shù)
                     pixel_size = bmpInfo.biBitCount >> 3;
                     // 讀取文件數(shù)據(jù)
                     textureImg->data = new unsigned char[bmpInfo.biWidth * bmpInfo.biHeight * pixel_size];
                     if (textureImg->data == NULL) {
                              fclose(file);
                              return false;
                     }

                     rewind(file);
                     fseek(file, 54L, 0);
                     for (i = 0; i < bmpInfo.biHeight; i++) {
                              for (j = 0; j < bmpInfo.biWidth; j++) {
                                       // 紅色分量
                                       fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 2,
                                                 sizeof(unsigned char), 1, file);
                                       // 綠色分量
                                       fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 1,
                                                 sizeof(unsigned char), 1, file);
                                       // 藍(lán)色分量
                                       fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 0,
                                               sizeof(unsigned char), 1, file);
                                       // Alpha分量
                                       if (pixel_size == 4) {
                                                fread(textureImg->data + (i * bmpInfo.biWidth + j) * pixel_size + 3,
                                                sizeof(unsigned char), 1, file);
                                       }
                              }
                     }
                     // 記錄圖像相關(guān)參數(shù)
                     textureImg->imgWidth = bmpInfo.biWidth;
                     textureImg->imgHeight = bmpInfo.biHeight;
                     textureImg->rgbType = pixel_size;
                     fclose(file);
                     return false;
            }
             
            #endif
            posted on 2010-12-17 17:33 逛奔的蝸牛 閱讀(381) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): OpenGL
            精品无码久久久久久国产| 色综合久久夜色精品国产| 国内精品久久久久影院薰衣草| 欧美综合天天夜夜久久| 精品久久久久久久久中文字幕| 国产人久久人人人人爽| 97久久超碰国产精品旧版 | 99久久精品国产高清一区二区| 伊人久久综合成人网| 亚洲AV乱码久久精品蜜桃| 久久AV高清无码| 午夜不卡888久久| 日日狠狠久久偷偷色综合0| 国内精品久久久久影院老司 | 久久超乳爆乳中文字幕| 99久久精品国内| 久久综合给合综合久久| 亚洲综合精品香蕉久久网| 久久精品国产99久久久| 日韩亚洲欧美久久久www综合网 | 香蕉久久夜色精品国产小说| 久久国产精品一区| 久久SE精品一区二区| 久久婷婷久久一区二区三区| 久久久久国色AV免费观看| 精品久久久中文字幕人妻| 99久久无码一区人妻a黑| 久久伊人影视| 精品久久久久久久无码| 欧美国产成人久久精品| AV色综合久久天堂AV色综合在 | 久久综合丝袜日本网| 欧美日韩精品久久久久| 91精品国产91久久久久福利| 久久久久国产| 国产精品久久久久天天影视| 思思久久好好热精品国产 | 久久久精品日本一区二区三区| 无码人妻精品一区二区三区久久久| 国产AV影片久久久久久 | 久久A级毛片免费观看|