• 大小: 2.13MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-14
  • 语言: C/C++
  • 标签: bmp  工具  

资源简介

bmp24位彩色图像转8位灰度图像,纯C++语言实现,适合图片处理初学者。

资源截图

代码片段和文件信息

#include 
#include 
using namespace std;

#pragma pack(2)        //两字节对齐,否则bmp_fileheader会占16Byte
struct bmp_fileheader
{
unsigned short    bfType;        //若不对齐,这个会占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:“ << bfh.bfType << “    bfSize:“ << bfh.bfSize << endl;

}

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是调色板占的字节数
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()        //灰度图像需要调色板
{
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.“ << endl;
cin.get();

delete[] src_buff;
delete[] dst_buff;
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..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\link.command.1.tlog

     文件       2890  2018-03-05 14:23  bmpTools\bmpTools\Debug\bmpTools.tlog\link.read.1.tlog

     文件        502  2018-03-05 14:23  bmpTools\bmpTools\Debug\bmpTools.tlog\link.write.1.tlog

     文件     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个文件信息

评论

共有 条评论