实践代码

  • 头文件
#pragma once
#include <afx.h>
class DigitalImage
{
private://指针数据类型,需要动态分配数据大小,并初始化数据//文件头LPBITMAPFILEHEADER m_lpBitmapFileHender;//除位图文件头的所有数据LPBYTE m_lpNotFileHenderData;//文件信息头LPBITMAPINFOHEADER m_lpBitmapInfoHender;LPBITMAPINFO m_lpBitmapInfo;//颜色表LPRGBQUAD m_lpRgbQuad;RGBQUAD* RgbArray;//图像数据LPBYTE m_lpBmpData;public:DigitalImage(LPCTSTR FileName);~DigitalImage();};
  • .cpp文件
#include "DigitalImage.h"
#include<iostream>
#include<math.h>
using namespace std;//构造函数,通过bmp(8位一下位图,即256色一下)位图的路劲来加载位图数据
DigitalImage::DigitalImage(LPCTSTR FileName)
{CFile RdBmp;//打开位图if (!RdBmp.Open(FileName, CFile::modeRead || CFile::shareDenyWrite))cout << "图像文件无法打开!" << endl;//申请文件头内存空间,用BYTE数组存储m_lpBitmapFileHender = (LPBITMAPFILEHEADER) new BYTE[sizeof(BITMAPFILEHEADER)];//初始化文件头memset(m_lpBitmapFileHender, 0, sizeof(BITMAPFILEHEADER));//读取文件头int FileHenderSize=RdBmp.Read((void*)m_lpBitmapFileHender, sizeof(BITMAPFILEHEADER));//判断是否读取了文件头if(FileHenderSize!= sizeof(BITMAPFILEHEADER))cout << "图像文件头读取错误!" << endl;//判断是否是位图图像if (m_lpBitmapFileHender->bfType == 0x4d42)//0x4d42=="BM",与是否是高字节在前还是低字节在前有关{//通过文件头获取图像文件大小DWORD FileSize = m_lpBitmapFileHender->bfSize;cout << "图像文件总字节数:" << FileSize << endl;//获取位图文件相对于文件头的偏移量DWORD of = m_lpBitmapFileHender->bfOffBits;//计算除文件头外,图像文件信息、包括文件信息头,颜色表和位图像素数据的总大小DWORD NotFileHenderSize = RdBmp.GetLength() - sizeof(BITMAPFILEHEADER);//GetLength()获取文件按字节计算的长度,而不是数量;//分配内存,读取数据,用于解析出来文件信息头,颜色表和像素数据m_lpNotFileHenderData = new BYTE[NotFileHenderSize];//初始化数组memset(m_lpNotFileHenderData, 0, NotFileHenderSize);//读取除文件头外的数据信息RdBmp.Read(m_lpNotFileHenderData, NotFileHenderSize);//关闭文件流RdBmp.Close();//通过m_lpNotFileHenderData数组获取文件信息头和文件信息结构体的起始地址。m_lpBitmapInfoHender =(LPBITMAPINFOHEADER) m_lpNotFileHenderData;m_lpBitmapInfo = (LPBITMAPINFO)m_lpNotFileHenderData; //计算颜色表的起始位置m_lpRgbQuad = (LPRGBQUAD)(m_lpNotFileHenderData + m_lpBitmapInfoHender->biSize);//通过文件信息头判断位图中是使用的颜色数if (m_lpBitmapInfoHender->biClrUsed == 0)cout << "图像没有颜色表" << endl;else{//通过判断位图是几位位图,计算颜色数,int size = (int)pow(2, m_lpBitmapInfoHender->biBitCount);//分配颜色表数组RgbArray = new RGBQUAD[size];//通过颜色表的起始位置获取颜色数据存入颜色表数组for (int i = 0; i < size; i++){RgbArray[i].rgbRed = m_lpRgbQuad->rgbRed;RgbArray[i].rgbGreen = m_lpRgbQuad->rgbGreen;RgbArray[i].rgbBlue = m_lpRgbQuad->rgbBlue;RgbArray[i].rgbReserved = 0;m_lpRgbQuad++;}//计算颜色表的字节长度DWORD RgbLen = size * sizeof(RGBQUAD);//颜色表之后即为图像像素的起始地址;m_lpBmpData = m_lpNotFileHenderData + m_lpBitmapInfoHender->biSize + sizeof(RgbArray);}}else{cout << "图像文件非BMP格式 !" << endl;}
}DigitalImage::~DigitalImage()
{delete[] m_lpBitmapFileHender;delete[] m_lpNotFileHenderData;m_lpBitmapInfoHender=NULL;m_lpBitmapInfo=NULL;m_lpRgbQuad=NULL;delete[] RgbArray;m_lpBmpData = NULL;
}
  • 主函数文件

#include "DigitalImage.h"
int main()
{//注意此处请更换问图片存储路径LPCTSTR filepath = "海王星.bmp";DigitalImage img(filepath);system("pause");return 0;
}

读取bmp格式数据--实践思考相关推荐

  1. C语言读取BMP格式图片

    C语言读取BMP格式图片 BMP 维基百科,自由的百科全书 汉漢▼ 位图 扩展名 .bmp 开发者 Microsoft 格式 图像文件格式  本文介绍的是一种图像文件格式. 关于Unicode的第1区 ...

  2. c语言实现pdf显示图片,C语言读取BMP格式图片.pdf

    C语言读取BMP格式图片 C 语言读取BMP 格式图片 以下摘自维基百科,自由的百科全书 BMP 取自位图BitMaP 的缩写,也称为DIB (与设备无关的位图)是微软视窗图形 子系统(Graphic ...

  3. R语言使用haven包的read_spss函数读取spss格式数据、使用haven包的read_sas函数读取SAS格式数据、使用haven包的read_dta函数读取Stata格式数据

    R语言使用haven包的read_spss函数读取spss格式数据.使用haven包的read_sas函数读取SAS格式数据.使用haven包的read_dta函数读取Stata格式数据 目录

  4. python读取mat数据_Python几种读取mat格式数据的方法,python几种读取mat

    Python几种读取mat格式数据的方法,python几种读取mat matlab中使用的数据一般会以mat的格式存储,用python读取有以下几种方法 1.使用scipy,具体实现如下: impor ...

  5. linux下通过C语言读取BMP格式图片,在文本终端显示该图片

    第一步:打开需要读取的图片文件 fd = open(picture, O_RDONLY): //只读方式打开文件 第二步:读取图片的长,宽,每个像素占多少字节,偏移量 查看bmp格式就能知道各个数据两 ...

  6. 读取bmp格式位图文件到二维数组(C语言)

    本来是打算弄个BadApple玩玩,不过不满足于简单地读取文本文件并输出,所以最后变成了研究如何用C语言读取位图文件并通过二维数组来存储像素信息. 第一步自然是弄清楚bmp的文件格式.在各种位图格式中 ...

  7. python读取grib格式数据

    python 读取grib/grib2格式数据 一般利用NCL(NCAR Command Language)读取.利用Python语言的pygrib库也可以读取grib/grib2格式数据 grib/ ...

  8. C++读取bmp格式图片

    类的格式按照bmp的文件头.信息头.调色板和数据域写好即可 因为图片是按字节读的,所以要强制让编译器不对结构体进行字节对齐,否则会出错 因为bmp格式规定存储时每行的像素数要补齐至4的整数倍,所以读入 ...

  9. c语言编程读取bmp文件数据,c语言读取BMP图片的RGB数据

    BMP图片是位图(bitmap),一般未压缩,要读取BMP文件只要知道它的文件结构就可以了,具体格式可以百度或者google,就不多说了,几个重要的点在代码里面有注释. /** c语言读取位图信息 * ...

最新文章

  1. C语言解析pcap文件得到HTTP信息实例(原创,附源码)
  2. Blanket PO(总括订单)
  3. 日本Blogger专用电脑
  4. php7.0 百度百科,PHP 7.0.10正式发布
  5. Hive分析窗口函数(五) GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
  6. 将rm -f or -rf 删除命令改为放入回收站,并可通过命令将其撤回
  7. c语言socket段错误,(Qtcpsocket)退出程序时提示段错误的解决
  8. 【Java从0到架构师】日志处理 - SLF4J、Logback、Log4j 2.x
  9. Rails核心成员纷纷离职,“推手”竟是其创始人?
  10. python3.x的改进
  11. 设计模式学习一:strategyPattern
  12. 渗透工具环境篇——Cknife中国菜刀的使用
  13. php 事件流转,php46公文流转
  14. 孕马血清促性腺激素PMSG的来源及主要功能
  15. Javascript 在WEB系统需求分析中的应用
  16. Xubuntu之lightdm开机无密码进入界面
  17. 高质量程序设计指南C++学习总结二
  18. tcp 与udp 的区别
  19. 【数据挖掘】-决策树算法+代码实现(七)
  20. FL Studio教程之Fruity Blood Overdrive插件

热门文章

  1. LeetCode 第 23 场双周赛(970/2044,前47.5%)
  2. centos 升级php5.5_CentOS 5.x 系统yum 升级php到5.2.x的方法(测试可用)
  3. TCP程序流程及服务器客户端
  4. Log4j框架配置文件
  5. android数据库给单选赋值,如何使用android studio将单选按钮的值保存到mysql数据库?...
  6. python序列符号_Python中的文本和字节序列
  7. Transformer太深不行?NUS字节发现注意力坍缩,提出重注意机制!
  8. 拒绝暴力调参!推荐一个模型Debug神器!
  9. 禁术级竞赛刷分技巧:找到跟测试集最接近的有标签样本
  10. 美团NLP中心算法实习生内推啦!