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

[code]

#include <iostream>
#include <fstream>

using namespace std;

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;

void main(){
fstream file;
int i,j;
char fileName[32], RGBQUAD[4][256], PIXEL[128][128],temp[128][128];


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[0], sizeof(RGBQUAD));
file.read(PIXEL[0], 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[i][j]=PIXEL[i][j];
}
}
//將資訊反轉180度
for(i=0;i<=127;i++){
for(j=0;j<=127;j++){
PIXEL[127-i][127-j]=temp[i][j];
}
}
//將資料從記憶體輸出到檔案
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[0], sizeof(RGBQUAD));
file.write(PIXEL[0], sizeof(PIXEL));
file.close();
}
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值