资源简介
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音频播放使用样例
相关资源
- sedumi matlab凸优化工具箱
- 国密SM9算法测试工具
- DLL反编译C++工具
- 解决Microsoft Visual C++ 14.0 is required
- 用VC++实现打开并显示bmp图片
- C++生成二维码并保存成BMP图片
- 基于CSerialPort串口工具MFC Demo源码
- MFC 图像处理之灰度直方图显示BMP图片
- C++MFC源代码二维绘图工具计算机图形
- 开源MPEG2-TS格式分析工具
- C++屏幕截图工具源代码
- sxstrace.exe修复工具C++.rar
- C++代码查看工具
- C++ > (开源) Ring3下的DLL注入工具
- HSV和RGB转化小工具
- c/c++源码浏览工具卷2
- C++ 即时聊天工具
- MFC实现的简单的画图工具
- Win-TCwindows下的C语言编程工具
- MFC socket编程 简易聊天工具及文件
- MFC动态加载和静态加载bmp类型图片
- 基于MFC的OpenCV视频图像显示小工具
- C++编写基于TCP/IP的Modbus网络通讯工具
- 仿Wireshark抓包工具MFC实现
- VB6 VC6最佳打包工具InstallShield,内附教
- TMS320C6xx系列DSP编程工具与指南
- PC-Lint 9.0L破解修正版
- MFC显示BMP格式图片
- DirectX修复工具V3.8标准版
- MFC编写的圆拟合工具
评论
共有 条评论