资源简介
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\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个文件信息
- 上一篇:MFC平台下的电子词典
- 下一篇:VC6环境下fmod音频播放使用样例
相关资源
- C语言代码高亮html输出工具
- ESP8266-01S(使用手册+固件库+烧录工具
- Qt画图工具源码(qgraphics draw)
- Qt 瑞士军刀开发工具
- 二维码生成BMP
- 使用Qt实现Excel读取工具
- Tcp自定义命令调试工具
- 对话框中实现浮动工具栏
- ftp工具代码
- c++语法查询工具
- dll依赖文件检测工具
- Linux开发工具手册
- VC6查找与替换插件
- 一个C++实现的源代码行数统计工具
- Delphi反编译工具
- 简单通讯录C语言实现
- Bmp图像处理.zip
- EAN13条码生成(C语言+VS2010)[包含EA
- c++ test9.5破解工具
- Dev-C++ V5.7.1中文版(32位64;位)_C++ 开
- SLAM算法大全,包括代码和文档、工具
- 基于MFC的无线串口调试工具-哈工大威
- celrityC/C++源码查看工具
- BC45,BC++ 4.5 开发工具
- C语言大一期末考小助手
- MFC画图板,可以画一些基本图形,如
- 如何在Visual StudioVS里使用libsvm工具箱
- 基于MFC的bmp图像处理268237
- CommBox通讯调试工具V1.261
- 图片切割工具
评论
共有 条评论