資源簡(jiǎn)介
bmp24位彩色圖像轉(zhuǎn)8位灰度圖像,純C++語(yǔ)言實(shí)現(xiàn),適合圖片處理初學(xué)者。

代碼片段和文件信息
#include?
#include?
using?namespace?std;
#pragma?pack(2)????????//兩字節(jié)對(duì)齊,否則bmp_fileheader會(huì)占16Byte
struct?bmp_fileheader
{
unsigned?short????bfType;????????//若不對(duì)齊,這個(gè)會(huì)占4Byte
unsigned?long????bfSize;
unsigned?short????bfReverved1;
unsigned?short????bfReverved2;
unsigned?long????bfOffBits;
};
struct?bmp_infoheader
{
unsigned?long????biSize;
unsigned?long????biWidth;
unsigned?long????biHeight;
unsigned?short????biPlanes;
unsigned?short????biBitCount;
unsigned?long????biCompression;
unsigned?long????biSizeImage;
unsigned?long????biXPelsPerMeter;
unsigned?long????biYpelsPerMeter;
unsigned?long????biClrUsed;
unsigned?long????biClrImportant;
};
fstream?input_file;
fstream?output_file;
struct?bmp_fileheader?bfh;
struct?bmp_infoheader?bih;
unsigned?char?*src_buff;
unsigned?char?*dst_buff;
void?read_bmp_fileheader()
{
input_file.read((char*)&bfh?sizeof(struct?bmp_fileheader));
cout?<“bfType:“?<
}
void?read_bmp_infoheader()
{
input_file.read((char*)&bih?sizeof(struct?bmp_infoheader));
}
void?read_bmp_data()
{
src_buff?=?new?unsigned?char[bih.biHeight*bih.biWidth?*?3];
input_file.read((char*)src_buff?sizeof(unsigned?char)*bih.biHeight*bih.biWidth?*?3);
}
void?bmp_rgb2gray()
{
dst_buff?=?new?unsigned?char[bih.biHeight*bih.biWidth];
int?tmp;
unsigned?long?j?=?0;
for?(unsigned?long?i?=?0;?i {
tmp?=?(src_buff[i]?+?src_buff[i?+?1]?+?src_buff[i?+?2])?/?3;
dst_buff[j++]?=?(unsigned?char)tmp;
}
}
void?write_bmp_fileheader()
{
bfh.bfSize?=?bfh.bfOffBits?+?256?*?4?+?bih.biWidth*bih.biHeight;????????//256*4是調(diào)色板占的字節(jié)數(shù)
bfh.bfOffBits?=?bfh.bfOffBits?+?256?*?4;
output_file.write((char*)&bfh?sizeof(struct?bmp_fileheader));
}
void?write_bmp_infoheader()
{
bih.biBitCount?=?8;????????????//8位灰度圖
output_file.write((char*)&bih?sizeof(struct?bmp_infoheader));
}
void?write_bmp_paltte()????????//灰度圖像需要調(diào)色板
{
unsigned?char?j?=?0;
unsigned?char?z?=?0;
for?(int?i?=?0;?i<1024;?i?+=?4)
{
output_file.write((char*)&j?sizeof(unsigned?char));
output_file.write((char*)&j?sizeof(unsigned?char));
output_file.write((char*)&j?sizeof(unsigned?char));
output_file.write((char*)&z?sizeof(unsigned?char));
j++;
}
}
void?write_bmp_data()
{
output_file.write((char*)dst_buff?sizeof(unsigned?char)*bih.biWidth*bih.biHeight);
}
int?main()
{
input_file.open(“test.bmp“?ios::binary?|?ios::in);
output_file.open(“test_gray.bmp“?ios::binary?|?ios::out);
read_bmp_fileheader();
read_bmp_infoheader();
read_bmp_data();
bmp_rgb2gray();
write_bmp_fileheader();
write_bmp_infoheader();
write_bmp_paltte();
write_bmp_data();
input_file.close();
output_file.close();
cout?<“good?job.“?< cin.get();
delete[]?src_buff;
delete[]?dst_buff;
return?0;
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
????..A..H.?????35840??2018-03-05?18:22??bmpTools\.vs\bmpTools\v14\.suo
?????文件???????7378??2018-03-05?14:14??bmpTools\bmpTools\bmpTools.vcxproj
?????文件????????948??2018-03-05?14:14??bmpTools\bmpTools\bmpTools.vcxproj.filters
?????文件????????192??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.log
?????文件????????207??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\bmpTools.lastbuildstate
?????文件????????678??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\CL.command.1.tlog
?????文件??????15884??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\CL.read.1.tlog
?????文件????????524??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\CL.write.1.tlog
?????文件???????1194??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\li
?????文件???????2890??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\li
?????文件????????502??2018-03-05?14:23??bmpTools\bmpTools\Debug\bmpTools.tlog\li
?????文件?????255055??2018-03-05?14:23??bmpTools\bmpTools\Debug\main.obj
?????文件?????338944??2018-03-05?14:23??bmpTools\bmpTools\Debug\vc140.idb
?????文件?????364544??2018-03-05?14:23??bmpTools\bmpTools\Debug\vc140.pdb
?????文件???????3023??2018-03-05?14:23??bmpTools\bmpTools\main.cpp
?????文件???????1306??2018-03-05?11:32??bmpTools\bmpTools.sln
?????文件????8364032??2018-03-05?18:22??bmpTools\bmpTools.VC.db
?????文件?????104960??2018-03-05?14:23??bmpTools\Debug\bmpTools.exe
?????文件?????754900??2018-03-05?14:23??bmpTools\Debug\bmpTools.ilk
?????文件????1265664??2018-03-05?14:23??bmpTools\Debug\bmpTools.pdb
?????目錄??????????0??2018-03-06?10:52??bmpTools\.vs\bmpTools\v14
?????目錄??????????0??2018-03-06?10:52??bmpTools\bmpTools\Debug\bmpTools.tlog
?????目錄??????????0??2018-03-06?10:52??bmpTools\.vs\bmpTools
?????目錄??????????0??2018-03-06?10:52??bmpTools\bmpTools\Debug
????...D.H.?????????0??2018-03-06?10:52??bmpTools\.vs
?????目錄??????????0??2018-03-06?10:52??bmpTools\bmpTools
?????目錄??????????0??2018-03-06?10:52??bmpTools\Debug
?????目錄??????????0??2018-03-06?10:52??bmpTools
-----------?---------??----------?-----??----
?????????????11518665????????????????????28
............此處省略1個(gè)文件信息
評(píng)論
共有 條評(píng)論