`
feargod
  • 浏览: 44163 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

画板BMP格式保存和打开总结

阅读更多

画板BMP格式保存和打开总结

         刚做完画板的自定义保存和BMP格式保存,我觉得有必要总结一下。先是比较简单的自定义保存。

         万物皆对象,对象由属性和方法构成。我们保存其实保存的是属性,保存的是关键的数据。比如画板的保存,画了一条直线,那么就把图形的名称“直线”,图形的颜色,图形的两个坐标,存储起来就可以了。打开时读取数据,再把这条直线画上去就可以了。其他可以有更复杂的图形,对象,但是思路是一致的。

         然后,保存是把数据存储起来,这就要自己决定一种存储数据的方式,存储哪些数据,按照什么先后顺序。读取时的顺序必须和存储时一样,不然就会出错。这就是所谓的文件格式。文件的格式不是由文件的扩展名决定的。如果把word文档的扩展名改成.txt,照样可以用word文档打开。所以格式就是这种存储的方式。

         接下来讲BMP文件。BMP文件由四部分组成:

1.       位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息

2.       位图信息数据结构,它包含BMP图像的宽、高、压缩方法,以及定义颜色等信息。

3.       调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩塑图(24位的BMP)就吧不需要调色板。

4.       位图数据,这个部分的内容根据BMP位图使用的位数的不同而不同,在24位位图中直接使用RBG,而其他的小于24位的使用调色板中颜色索引值。

那么接下来就来比较详细地讲一下各个数据结构。

BMP文件头(14字节)

Int bfType;       //位图文件的类型,必须为’B’’M’两个字母(0-1字节)

Int bfSize;                   //位图文件的大小,以字节为单位(2-5字节)

Int usignedshort bfreserved01;       //文图文件保留字,必须为06-7字节)

Int usignedshort bfreserved02;       //文图文件保留字,必须为08-9字节)

 

Int bfOffBits;    //文件头的偏移量表示,以字节为单位(10-13字节)

 

 

 

 

 

 

 

 

 


位图信息头(40字节)

用于说明位图的尺寸等信息

 

 

int size;     //本结构所占用的字节数(14-17字节)

int image_width;     //位图的宽度,以像素为单位(18-21字节)

int image_height;   //位图的高度,以像素为单位(22-25字节)

int planes;         //目标设备的级别,必须为126-27字节)

int biBitCount;                 //每个像素所需的位数,必须是1(双色),(28-29字节)416色),8256色)或24(真彩色)之一

int biCompression //位图的压缩类型,必须是0(不压缩),(30-33字节)416色),8256色)或24(真彩色)之一

int sizeImage;//为位图大小

int biXpelsPerMeter;//水平分辨率

int biYPelsPerMeter;//垂直分辨率

int biClrUsed;//位图实际使用的颜色表中的颜色数

int biClrImportant;//位图显示过程中重要的颜色

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

颜色表

颜色表用于说明图中的颜色,它有若干个表项,每一个表项是一个RBGQUAD类型的结构,定义一种颜色。

class RBGQUAD{

    byte rbgBlue;//蓝色的亮度(值范围为0-255

    byte rbgGreen;//绿色的亮度(值范围为0-255

    byte rbgRed;//红色的亮度(值范围为0-255

    byte rbgReserved;//保留,必须为0

}

 

 

 

 

 

 

 

 

 

颜色表中RBGQUAD结构的个数有biBitCount来确定。当biBitCount=148时,分别有2,16,256个表项;当biBitCount=24时,没有颜色表项。

位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:

class BITMAPINFO{

    BITMAPINFOHEADER bmiHeader;//位图信息表

    RGBQUAD bmiColors[1];//颜色表

}

 

 

 

 

 

         位图数据

         位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,在扫描行间是从上到下。位图的一个像素值所占的字节数。

         biBitCount=1时,8个像素占1个字节

         biBitCount=4时,2个像素占1个字节

         biBitCount=8时,1个像素占1个字节

         biBitCount=24时,1个像素占3个字节

         Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。

 

BMP文件的保存大概就是那样的了,下面是我做的一个简易画图板,可以实现BMP格式的保存和打开,代码详见附件。

分享到:
评论

相关推荐

    自制画板打开和保存BMP格式文件

    总的来说,自制画板打开和保存BMP格式文件涉及到的知识点包括:BMP文件格式的理解与解析,二进制文件操作,图像处理基础,GUI编程,以及事件驱动编程。这个项目既能够加深对图像文件格式的理解,也能锻炼实际编程...

    XP自带画板

    保存作品时,画板默认保存为.BMP格式,这是一种无损的位图格式,但文件较大。如果需要减小文件尺寸,可以选择另存为.JPEG或其他压缩格式。需要注意的是,由于画板的功能限制,复杂的图像编辑操作可能无法完成,因此...

    java写的画板

    (7)文件保存格式为BMP格式; (8)文字功能:读取文本框中的文本并打印到屏幕鼠标的相应的响应位置,传入输入的文字大小的参数,以此来改变文字的大小; 4.弹泡泡功能的设计 根据Java多线程来实现弹泡泡功能;泡泡的...

    仿windows的画板

    5. **文件操作**:仿windows画板可能支持保存和打开绘图文件,以便用户可以保存他们的作品并在以后继续编辑。这需要实现文件I/O功能,通常涉及读写BMP或其他图像文件格式。 6. **FontTest**:这个文件名可能是用来...

    MFC实现的windows小画板

    虽然这个小画板的描述中没有特别提及文件操作,但通常一个完整的绘图应用会提供保存和打开文件的功能。这需要实现对CDocument类的扩展,支持读写位图文件(如BMP格式)。通过MFC的 serialization 机制,可以方便地将...

    mfc 画画板软件作业

    另一个问题是关于“打开和保存为BMP”功能。BMP是一种常见的位图图像格式,支持无损保存,因此在画板软件中很常见。开发者可能已经实现了读取和写入BMP文件的功能,允许用户保存他们的作品或加载已有的图像作为画布...

    基本画板功能

    - **保存**:将画布上的内容保存为图像文件(如PNG、JPEG、BMP等格式),以便于分享和后期处理。 - **打开**:加载已保存的图像文件到画板,继续编辑。 6. **撤销与重做** - **撤销/重做功能**:提供历史记录,...

    windows小画板

    Windows小画板可能集成了保存和打开画布的能力,这就需要用到文件I/O相关的API,如CreateFile、ReadFile、WriteFile以及CloseHandle。用户可以保存自己的作品到磁盘,并在需要时重新加载。此外,为了支持文件格式...

    c++ opengl 多边形画板(山大图形学实验二)

    功能包括: 对象创建:支持用户利用鼠标指定各个顶点位置,创建多边形。 对象删除:支持用户选择一个多边形(与你的多边形保存的数据结构有关)并删除。 对象存储:设计一种数据结构...4.支持用户将多边形存储为bmp格式

    vc++实现简单绘画板

    7. **保存和加载图像**:为了让用户能够保存他们的作品,我们可以添加保存和打开文件的功能。这涉及到读写BMP或其他图像格式的文件,可能需要用到额外的库,如GDI+,或者直接处理文件的二进制数据。 8. **撤销/重做...

    用qt 编写简易画板

    - 添加“保存”和“打开”功能,使用`QImage`和`QFile`类来读写位图文件,如BMP或PNG格式。 - 在保存时,将`QPainterPath`转换为`QImage`,并使用`QImage`的`save`方法保存图像。 - 打开时,加载图像到`QImage`,...

    MFC简易画板

    8. **文件操作**:保存和打开图像文件,一般会涉及到BMP、PNG或JPEG等常见图片格式的读写。这需要用到特定的文件I/O函数和图像编码库。 9. **UI设计**:界面设计包括菜单、工具栏和状态栏等元素,它们的创建和管理...

    易语言取画板图片文件源码.7z

    然后,可以使用`写二进制文件`命令将画板的图像数据写入文件,通常以BMP、JPEG或PNG等常见图像格式保存。 4. **取画板图像**:在易语言中,获取画板上的图像数据通常需要利用特定的API函数或者系统命令。例如,可以...

    VB编写画板VB编写画板

    这需要用到文件I/O操作,如`SaveFileDialog`和`OpenFileDialog`控件,以及二进制序列化或图片文件格式(如BMP、JPEG)的读写。 8. **优化性能**:对于大规模的绘图操作,可能需要考虑性能优化。例如,可以使用双...

    立几画板 v6.0.5.2.zip

    可以打开或保存多种格式的图象文件(如bmp、jpg、gif、png等),并对此进行缩放、裁剪、转换等操作。 立几画板 v6.0.5.2 更新日志 增加了“添加文本”命令,可以象Word中一样直接输入文本。 默认文本颜色改为黄色...

    C#高仿windows7画板

    这需要使用Image类读写图片文件,如BMP、JPEG或PNG格式。 6. **事件处理**:所有的用户交互,如鼠标点击、移动和释放,都需要通过事件处理程序来响应。例如,MouseDown、MouseMove和MouseUp事件分别用于开始绘制、...

    vc简单画板实现

    6. 保存与加载:为了让用户能够保存和恢复他们的作品,你需要实现文件操作功能,如保存为BMP或PNG等图像格式。这需要用到Windows API中的文件I/O函数,以及图像数据的序列化和反序列化知识。 7. 用户界面设计:一个...

    玲珑画板菜单工具使用说明之一:文件菜单.pdf

    6. 导入(Import):导入外部图像或图形文件到玲珑画板中,可以是常见的图像格式,如JPEG、PNG、BMP等。 7. 导出(Export):将玲珑画板中的项目导出为其他文件格式,使得作品可以在其他软件或平台中查看或编辑。 8....

    用c++编windonws画板的实训报告

    - **文件格式**:了解BMP、PCX、TIF等图像格式的基本特点。 - **矢量图优势**:强调矢量图在变形处理方面的灵活性与高效性。 ##### 设计阶段 1. **MFC框架简介**: - **CWnd窗口类**:作为大多数可视组件的基类...

Global site tag (gtag.js) - Google Analytics