BMP图像的读写8位和24位Word文档格式.docx

上传人:b****1 文档编号:15011267 上传时间:2022-10-26 格式:DOCX 页数:18 大小:212.57KB
下载 相关 举报
BMP图像的读写8位和24位Word文档格式.docx_第1页
第1页 / 共18页
BMP图像的读写8位和24位Word文档格式.docx_第2页
第2页 / 共18页
BMP图像的读写8位和24位Word文档格式.docx_第3页
第3页 / 共18页
BMP图像的读写8位和24位Word文档格式.docx_第4页
第4页 / 共18页
BMP图像的读写8位和24位Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

BMP图像的读写8位和24位Word文档格式.docx

《BMP图像的读写8位和24位Word文档格式.docx》由会员分享,可在线阅读,更多相关《BMP图像的读写8位和24位Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

BMP图像的读写8位和24位Word文档格式.docx

table)和定义位图的字节阵列,它具有如下所示的形式。

位图文件的组成 

结构名称 

符号 

header)

BITMAPFILEHEADER

bmfh

位图信息头(bitmap-information 

BITMAPINFOHEADER

bmih

彩色表(color 

table)

RGBQUAD

aColors[]

图象数据阵列字节

BYTE

aBitmapBits[]

位图文件结构容摘要

 

偏移量 

域的名称 

大小 

容 

  

图象文件 

0000h

文件标识

bytes

两字节的容用来识别位图的类型:

‘BM’ 

Windows 

3.1x, 

95, 

NT, 

… 

‘BA’ 

OS/2 

Bitmap 

Array 

‘CI’ 

Color 

Icon 

‘CP’ 

Pointer 

‘IC’ 

‘PT’ 

Pointer

注:

因为OS/2系统并没有被普及开,所以在编程时,你只需判断第一个标识“BM”就行。

0002h

File 

Size

dword

用字节表示的整个文件的大小

0006h

Reserved

保留,必须设置为0

000Ah

Data 

Offset

从文件开始到位图数据开始之间的数据(bitmap 

data)之间的偏移量

000Eh

Header 

位图信息头(Bitmap 

Info 

Header)的长度,用来描述位图的颜色、压缩方法等。

下面的长度表示:

28h 

0Ch 

1.x 

F0h 

2.x

在Windows95、98、2000等操作系统中,位图信息头的长度并不一定是28h,因为微软已经制定出了新的BMP文件格式,其中的信息头结构变化比较大,长度加长。

所以最好不要直接使用常数28h,而是应该从具体的文件中读取这个值。

这样才能确保程序的兼容性。

0012h

Width

位图的宽度,以象素为单位

0016h

Height

位图的高度,以象素为单位

001Ah

Planes

word

位图的位面数(注:

该值将总是1)

图象 

信息 

头 

001Ch

Bits 

Per 

Pixel

每个象素的位数 

单色位图(实际上可有两种颜色,缺省情况下是黑色和白色。

你可以自己定义这两种颜色) 

16 

色位图 

256 

16bit 

高彩色位图 

24 

24bit 

真彩色位图 

32 

32bit 

增强型真彩色位图

001Eh

Compression

压缩说明:

不压缩 

(使用BI_RGB表示) 

RLE 

8-使用8位RLE压缩方式(用BI_RLE8表示) 

4-使用4位RLE压缩方式(用BI_RLE4表示) 

Bitfields-位域存放方式(用BI_BITFIELDS表示)

0022h

用字节数表示的位图数据的大小。

该数必须是4的倍数

0026h

HResolution

用象素/米表示的水平分辨率

002Ah

VResolution

用象素/米表示的垂直分辨率

002Eh

Colors

位图使用的颜色数。

如8-比特/象素表示为100h或者 

256.

0032h

Important 

指定重要的颜色数。

当该域的值等于颜色数时(或者等于0时),表示所有颜色都一样重要

调色板数据

根据BMP版本的不同而不同

Palette

byte

调色板规。

对于调色板中的每个表项,这4个字节用下述方法来描述RGB的值:

1字节用于蓝色分量

1字节用于绿色分量

1字节用于红色分量

1字节用于填充符(设置为0)

图象数据

根据BMP版本及调色板尺寸的不同而不同

Data

xxx 

该域的大小取决于压缩方法及图像的尺寸和图像的位深度,它包含所有的位图数据字节,这些数据可能是彩色调色板的索引号,也可能是实际的RGB值,这将根据图像信息头中的位深度值来决定。

3、读写涉及的原理

1、图像的二值化的基本原理

图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。

即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。

在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。

为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。

所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。

如果某特定物体在部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。

如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。

动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。

2、图像的反色原理

对于彩色图像的R、G、B各彩色分量取反的技术就是图像的反色处理,这在处理二值化图像的连通区域选取的时候非常重要。

如物体连通域用黑色表示,而二值化后的物体连通域图像可那是白色的,而背景是黑色的,这时应手动选取图像的反色处理或有程序根据背景和物体连通域两种颜色的数量所占比例而自动选择是否选择选取图像的反色处理

四、读写转换代码

#include<

math.h>

#include<

iomanip.h>

stdlib.h>

windows.h>

stdio.h>

iostream.h>

fstream.h>

//---------------------------------------------------------------------------------------

//以下该模块是完成BMP图像(彩色图像是24bitRGB各8bit)的像素获取,并存在文件名为xiang_su_zhi.txt中

unsignedchar*pBmpBuf;

//读入图像数据的指针

intbmpWidth;

//图像的宽

intbmpHeight;

//图像的高

RGBQUAD*pColorTable;

//颜色表指针

intbiBitCount;

//图像类型,每像素位数

//-------------------------------------------------------------------------------------------

//读图像的位图数据、宽、高、颜色表及每像素位数等数据进存,存放在相应的全局变量中

boolreadBmp(char*bmpName)

{

FILE*fp=fopen(bmpName,"

rb"

);

//二进制读方式打开指定的图像文件

if(fp==0)

return0;

//跳过位图文件头结构BITMAPFILEHEADER

fseek(fp,sizeof(BITMAPFILEHEADER),0);

//定义位图信息头结构变量,读取位图信息头进存,存放在变量head中

BITMAPINFOHEADERhead;

fread(&

head,sizeof(BITMAPINFOHEADER),1,fp);

//获取图像宽、高、每像素所占位数等信息

bmpWidth=head.biWidth;

bmpHeight=head.biHeight;

biBitCount=head.biBitCount;

//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)

intlineByte=(bmpWidth*biBitCount/8+3)/4*4;

//灰度图像有颜色表,且颜色表表项为256

if(biBitCount==8)

{

//申请颜色表所需要的空间,读颜色表进存

pColorTable=newRGBQUAD[256];

fread(pColorTable,sizeof(RGBQUAD),256,fp);

}

//申请位图数据所需要的空间,读位图数据进存

pBmpBuf=newunsignedchar[lineByte*bmpHeight];

fread(pBmpBuf,1,lineByte*bmpHeight,fp);

fclose(fp);

//关闭文件

return1;

//读取文件成功

}

//------------------------------------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿理论经验

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1