画板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; //文图文件保留字,必须为0(6-7字节)
Int usignedshort bfreserved02; //文图文件保留字,必须为0(8-9字节)
Int bfOffBits; //文件头的偏移量表示,以字节为单位(10-13字节)
|
位图信息头(40字节)
用于说明位图的尺寸等信息
int size; //本结构所占用的字节数(14-17字节)
int image_width; //位图的宽度,以像素为单位(18-21字节)
int image_height; //位图的高度,以像素为单位(22-25字节)
int planes; //目标设备的级别,必须为1(26-27字节)
int biBitCount; //每个像素所需的位数,必须是1(双色),(28-29字节)4(16色),8(256色)或24(真彩色)之一
int biCompression //位图的压缩类型,必须是0(不压缩),(30-33字节)4(16色),8(256色)或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=1,4,8时,分别有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文件格式的理解与解析,二进制文件操作,图像处理基础,GUI编程,以及事件驱动编程。这个项目既能够加深对图像文件格式的理解,也能锻炼实际编程...
保存作品时,画板默认保存为.BMP格式,这是一种无损的位图格式,但文件较大。如果需要减小文件尺寸,可以选择另存为.JPEG或其他压缩格式。需要注意的是,由于画板的功能限制,复杂的图像编辑操作可能无法完成,因此...
(7)文件保存格式为BMP格式; (8)文字功能:读取文本框中的文本并打印到屏幕鼠标的相应的响应位置,传入输入的文字大小的参数,以此来改变文字的大小; 4.弹泡泡功能的设计 根据Java多线程来实现弹泡泡功能;泡泡的...
5. **文件操作**:仿windows画板可能支持保存和打开绘图文件,以便用户可以保存他们的作品并在以后继续编辑。这需要实现文件I/O功能,通常涉及读写BMP或其他图像文件格式。 6. **FontTest**:这个文件名可能是用来...
虽然这个小画板的描述中没有特别提及文件操作,但通常一个完整的绘图应用会提供保存和打开文件的功能。这需要实现对CDocument类的扩展,支持读写位图文件(如BMP格式)。通过MFC的 serialization 机制,可以方便地将...
另一个问题是关于“打开和保存为BMP”功能。BMP是一种常见的位图图像格式,支持无损保存,因此在画板软件中很常见。开发者可能已经实现了读取和写入BMP文件的功能,允许用户保存他们的作品或加载已有的图像作为画布...
- **保存**:将画布上的内容保存为图像文件(如PNG、JPEG、BMP等格式),以便于分享和后期处理。 - **打开**:加载已保存的图像文件到画板,继续编辑。 6. **撤销与重做** - **撤销/重做功能**:提供历史记录,...
Windows小画板可能集成了保存和打开画布的能力,这就需要用到文件I/O相关的API,如CreateFile、ReadFile、WriteFile以及CloseHandle。用户可以保存自己的作品到磁盘,并在需要时重新加载。此外,为了支持文件格式...
功能包括: 对象创建:支持用户利用鼠标指定各个顶点位置,创建多边形。 对象删除:支持用户选择一个多边形(与你的多边形保存的数据结构有关)并删除。 对象存储:设计一种数据结构...4.支持用户将多边形存储为bmp格式
7. **保存和加载图像**:为了让用户能够保存他们的作品,我们可以添加保存和打开文件的功能。这涉及到读写BMP或其他图像格式的文件,可能需要用到额外的库,如GDI+,或者直接处理文件的二进制数据。 8. **撤销/重做...
- 添加“保存”和“打开”功能,使用`QImage`和`QFile`类来读写位图文件,如BMP或PNG格式。 - 在保存时,将`QPainterPath`转换为`QImage`,并使用`QImage`的`save`方法保存图像。 - 打开时,加载图像到`QImage`,...
8. **文件操作**:保存和打开图像文件,一般会涉及到BMP、PNG或JPEG等常见图片格式的读写。这需要用到特定的文件I/O函数和图像编码库。 9. **UI设计**:界面设计包括菜单、工具栏和状态栏等元素,它们的创建和管理...
然后,可以使用`写二进制文件`命令将画板的图像数据写入文件,通常以BMP、JPEG或PNG等常见图像格式保存。 4. **取画板图像**:在易语言中,获取画板上的图像数据通常需要利用特定的API函数或者系统命令。例如,可以...
这需要用到文件I/O操作,如`SaveFileDialog`和`OpenFileDialog`控件,以及二进制序列化或图片文件格式(如BMP、JPEG)的读写。 8. **优化性能**:对于大规模的绘图操作,可能需要考虑性能优化。例如,可以使用双...
可以打开或保存多种格式的图象文件(如bmp、jpg、gif、png等),并对此进行缩放、裁剪、转换等操作。 立几画板 v6.0.5.2 更新日志 增加了“添加文本”命令,可以象Word中一样直接输入文本。 默认文本颜色改为黄色...
这需要使用Image类读写图片文件,如BMP、JPEG或PNG格式。 6. **事件处理**:所有的用户交互,如鼠标点击、移动和释放,都需要通过事件处理程序来响应。例如,MouseDown、MouseMove和MouseUp事件分别用于开始绘制、...
6. 保存与加载:为了让用户能够保存和恢复他们的作品,你需要实现文件操作功能,如保存为BMP或PNG等图像格式。这需要用到Windows API中的文件I/O函数,以及图像数据的序列化和反序列化知识。 7. 用户界面设计:一个...
6. 导入(Import):导入外部图像或图形文件到玲珑画板中,可以是常见的图像格式,如JPEG、PNG、BMP等。 7. 导出(Export):将玲珑画板中的项目导出为其他文件格式,使得作品可以在其他软件或平台中查看或编辑。 8....
- **文件格式**:了解BMP、PCX、TIF等图像格式的基本特点。 - **矢量图优势**:强调矢量图在变形处理方面的灵活性与高效性。 ##### 设计阶段 1. **MFC框架简介**: - **CWnd窗口类**:作为大多数可视组件的基类...