资源简介
BMP图像文件读写操作类,C++实现,支持24位位图。适合学习用。
代码片段和文件信息
//---------------------------------------------------------------------------
#pragma hdrstop
#include “BMPHelper.h“
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
TBMPHelper::TBMPHelper(void)
{
InitBMPFile();
}
//---------------------------------------------------------------------------
TBMPHelper::~TBMPHelper(void)
{
if(NULL != m_BMPFile->BMPData)
{
delete []m_BMPFile->BMPData;
m_BMPFile->BMPData = NULL;
}
delete m_BMPFile;
}
//---------------------------------------------------------------------------
void TBMPHelper::InitBMPFile(void)
{
m_BMPFile = new BITMAPFILE;
memset(&(m_BMPFile->FileHeader) 0 sizeof(m_BMPFile->FileHeader));
memset(&(m_BMPFile->InfoHeader) 0 sizeof(m_BMPFile->InfoHeader));
m_BMPFile->BMPData = NULL;
m_RealImageWidth = 0;
m_RealImageHeight = 0;
m_RealImageDataSize = 0;
}
//---------------------------------------------------------------------------
int TBMPHelper::OpenBMPFile(const wchar_t* wszFileName)
{
wchar_t wszOpenMode[] = {‘r‘‘b‘};
FILE *pFile = _wfopen(wszFileName wszOpenMode);
if(NULL == pFile)
{
return 1;
}
// 加载位图文件头
fseek(pFile 0 SEEK_SET);
fread(&(m_BMPFile->FileHeader) sizeof(m_BMPFile->FileHeader) 1 pFile);
// 不是有效的BMP位图文件
if(0x4d42 != m_BMPFile->FileHeader.bfType)
{
fclose(pFile);
return 2;
}
// 加载位图信息头
fseek(pFile sizeof(m_BMPFile->FileHeader) SEEK_SET);
fread(&(m_BMPFile->InfoHeader) sizeof(m_BMPFile->InfoHeader) 1 pFile);
// 仅支持24位真彩色图像
if(24 != m_BMPFile->InfoHeader.biBitCount)
{
fclose(pFile);
return 3;
}
// 计算位图数据大小,这里计算数据需要检测高度值的正负性
m_RealImageWidth = m_BMPFile->InfoHeader.biWidth;
m_RealImageHeight = m_BMPFile->InfoHeader.biHeight > 0 ? m_BMPFile->InfoHeader.biHeight : -(m_BMPFile->InfoHeader.biHeight);
WORD BitsPerPixel = m_BMPFile->InfoHeader.biBitCount;
DWORD LineByteCnt = (m_RealImageWidth*BitsPerPixel)/8;
m_RealImageDataSize = LineByteCnt*m_RealImageHeight;
m_BMPFile->BMPData = new BYTE[m_RealImageDataSize];
fseek(pFile m_BMPFile->FileHeader.bfOffBits SEEK_SET);
// 不需要四字节对齐处理
if(0 == LineByteCnt%4)
{
// 加载位图数据
fread(m_BMPFile->BMPData m_RealImageDataSize 1 pFile);
}
else
{
BYTE *WTDataBuf = m_BMPFile->BMPData;
LONG WTSize = 3*m_RealImageWidth;
int FillOffset = 4 - LineByteCnt%4;
for(int iY=0; iY {
// 加载位图数据
fread(WTDataBuf WTSize 1 pFile);
WTDataBuf += WTSize;
fseek(pFile FillOffset SEEK_CUR);
}
}
fclose(pFile);
return 0;
}
//---------------------------------------------------------------------------
int TBMPHelper::SaveToBMPFile(const wchar_t* wszFileName)
{
if(NULL == m_BMPFile->BMPData)
{
return 1;
}
wchar_t wszOpenMode[] = {‘w‘‘b‘};
FILE *pFile = _wfope
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5195 2017-10-21 09:52 BMPHelper\BMPHelper.cpp
文件 3188 2017-11-04 22:57 BMPHelper\BMPHelper.h
目录 0 2017-10-21 10:00 BMPHelper
----------- --------- ---------- ----- ----
8383 3
相关资源
- VC++点阵字生成器(MFC)
- Linux c++多线程串口编程demo
- C++卫星定位程序--通过卫星星历确定卫
- 扫雷游戏c++源码实现
- Matlab笔记——使用GPU运算、调用C/C+
- C++ UDP SOCKET 简单网络通讯
- 离散弗雷歇Frechet距离 C/C++
- 西北工业大学C++语言大作业实验报告
- 用vs2012做ActiveX控件并使用html、c#、
- 40G郁金香VC++游戏辅助制作视频教程如
- c/c++ 字符集 gbk/utf8互转,Ansi/Utf8互转
- 华为c++面试题
- 基于TCP的聊天室c++、MFC
- 东南大学c++ PPT
- C++算术表达式求值(支持函数)
- C++ 超大整数类 及RSA加密
- 操作系统 缓冲池 C++
- 图像处理连通域算法 c++ vc 6.0
- DDA画线算法
- C++局域网文件传输
- 防火墙C++源码,测试可以运行
- 用c++自编的GPS单点定位程序源码
- 四叉树定义实现C++代码
- vc++简易图形编辑器MFC
- C++实现字符串求交集、并集、差集
- c++ 栈应用 使用标准库函数 源代码 原
- c++线性方程组求解源代码 原创
- 一个简单的C++抽签程序
- 《The c++ programming language 》的习题答案
- sha256-512加密算法
评论
共有 条评论