olife 发表于 2013-2-1 11:48:16

[c++] 讀取一個8bit的bmp

#include <iostream>#include <fstream>using namespace std;typedef unsigned char   BYTE;typedef unsigned shortWORD;typedef unsigned long   DWORD;typedef long            LONG;void main(){    fstream file;      int i,j;    char fileName, RGBQUAD, PIXEL,temp;      WORD bfType;    DWORD bfSize;    WORD bfReserved1;    WORD bfReserved2;    DWORD bfOffBits;    DWORD biSize;    LONG biWidth;    LONG biHeight;    WORD biPlanes;    WORD biBitCount;    DWORD biCompression;    DWORD biSizeImage;    LONG biXPelsPerMeter;    LONG biYPelsPerMeter;    DWORD biClrUsed;    DWORD biClrImportant;    //將資料從檔案輸入到記憶體      cout << "Open FileName: ";    cin >> fileName;    file.open(fileName, ios::in|ios::binary);    file.read((char*)&bfType, sizeof(WORD));    file.read((char*)&bfSize, sizeof(DWORD));    file.read((char*)&bfReserved1, sizeof(WORD));    file.read((char*)&bfReserved2, sizeof(WORD));    file.read((char*)&bfOffBits, sizeof(DWORD));    file.read((char*)&biSize, sizeof(DWORD));    file.read((char*)&biWidth, sizeof(LONG));    file.read((char*)&biHeight, sizeof(LONG));    file.read((char*)&biPlanes, sizeof(WORD));    file.read((char*)&biBitCount, sizeof(WORD));    file.read((char*)&biCompression, sizeof(DWORD));    file.read((char*)&biSizeImage, sizeof(DWORD));    file.read((char*)&biXPelsPerMeter, sizeof(LONG));    file.read((char*)&biYPelsPerMeter, sizeof(LONG));    file.read((char*)&biClrUsed, sizeof(DWORD));    file.read((char*)&biClrImportant, sizeof(DWORD));    file.read(RGBQUAD, sizeof(RGBQUAD));    file.read(PIXEL, sizeof(PIXEL));    file.close();    //顯示檔案資訊      cout << "FILE_HEADER\n"         << "bfType=\t\t"       << bfType       << '\n'         << "bfSize=\t\t"       << bfSize       << '\n'         << "bfReserved1=\t"    << bfReserved1<< '\n'         << "bfReserved2=\t"    << bfReserved2<< '\n'         << "bfOffBits=\t"      << bfOffBits    << "\n\n"         << "INFO_HEADER\n"         << "biSize=\t\t"       << biSize       << '\n'         << "biWidth=\t"      << biWidth      << '\n'         << "biHeight=\t"       << biHeight   << '\n'         << "biPlanes=\t"       << biPlanes   << '\n'         << "biBitCount=\t"   << biBitCount   << '\n'         << "biCompression=\t"<< biCompression    << '\n'         << "biSizeImage=\t"    << biSizeImage      << '\n'         << "biXPelsPerMeter="<< biXPelsPerMeter<< '\n'         << "biYPelsPerMeter="<< biYPelsPerMeter<< '\n'         << "biClrUsed=\t"      << biClrUsed      << '\n'         << "biClrImportant=\t" << biClrImportant   << "\n\n";                //將圖片資訊暫存到TEMP裡面                for(i=127;i>=0;i--){                        for(j=127;j>=0;j--){                              temp=PIXEL;                              }                        }                        //將資訊反轉180度                for(i=0;i<=127;i++){                        for(j=0;j<=127;j++){                              PIXEL=temp;                              }                        }                //將資料從記憶體輸出到檔案                        cout << "輸入旋轉後儲存的名稱:\t";            cin >> fileName;                file.open(fileName, ios::out|ios::binary);                file.write((char*)&bfType, sizeof(WORD));                file.write((char*)&bfSize, sizeof(DWORD));                file.write((char*)&bfReserved1, sizeof(WORD));                file.write((char*)&bfReserved2, sizeof(WORD));                file.write((char*)&bfOffBits, sizeof(DWORD));                file.write((char*)&biSize, sizeof(DWORD));                file.write((char*)&biWidth, sizeof(LONG));                file.write((char*)&biHeight, sizeof(LONG));                file.write((char*)&biPlanes, sizeof(WORD));                file.write((char*)&biBitCount, sizeof(WORD));                file.write((char*)&biCompression, sizeof(DWORD));                file.write((char*)&biSizeImage, sizeof(DWORD));                file.write((char*)&biXPelsPerMeter, sizeof(LONG));                file.write((char*)&biYPelsPerMeter, sizeof(LONG));                file.write((char*)&biClrUsed, sizeof(DWORD));                file.write((char*)&biClrImportant, sizeof(DWORD));                file.write(RGBQUAD, sizeof(RGBQUAD));                file.write(PIXEL, sizeof(PIXEL));                file.close();                }
页: [1]
查看完整版本: [c++] 讀取一個8bit的bmp