[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]