基于VC + +的BMP格式图像与GIF格式图像转换
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
转换前的BMP图片和转换后的GIF图片如 图3所示。
4 VC++下BMP转换成GIF的实现
VC++环境下实现BMP向GIF转换,是基 于前面的BMP图像的读取显示保存操作和LZw 算法分析基础之上的,并同时要求分析GIF文件 的具体格式与读写方法。程序是基于vc++下 的多文本文档应用程序,具体流程如图2所示。
DWORD biSize; LONG biWidth:
LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizelmage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed;
BYTE rgbRed; BYTE rgbReserved;
}RGBQUAD; (4)位图数据。它是紧跟在调色板后的图像 数据字节阵列。图像的每一扫描行由表示图像像 素的连续的字节组成,每一行的字节数取决于图 像的颜色数目和用像素表示的图像宽度,扫描行 是由底向上存储的。这就是说,阵列中的第一个 字节表示位图左下角的像素。而最后一个字节表 示位图右上角的像素,对于用到调色板的位图,图 像数据就是该像素在调色板中的索引值,对于真 色彩图,图像数据就是实际的RGB值。同时,每 一扫描行的字节数必须是4的整倍数,也就是 DWORD对齐的心J。
[编辑:李道文]
(上接第25页)
参考文献:
高伟卫,杨胜强,张满栋.基于VC++6.0基础类库 的图像显示[J].机械管理开发,2006(5):62—65. [2] 郭伟斌,冯钿,罗文村,等.图像压缩转换技术机 理的研究[J].电脑开发与应用,2006(8):34—38. [3] 邬正义,张永跃,谈正.图像批量入库及图像数据
(下转第30页)
万方数据
30
武 氓从 汉理上 工八大予学子学1报医.’信旧息思与叫管目理理工上程任版 似
2007年12月
水印算法[J].武汉理工大学学报:信息与管理工程 版,2005。27(5):31—34. [6] 高守传,姚领田.Visual C++实践与提高数字图像 处理与工程应用篇[M].北京:中国铁道出版社,
图1 VC++F实现BMP图像的读取显不流程图
别的最长的字符串,也就是已经在词典中出现的
最长的前缀。用已知的前缀加上下一个输入字符 C,也就是当前字符作为该前缀的扩展字符,形成
新的扩展字符串一缀一符串。这个新的缀一符串 是否要加到词典中,还要看词典中是否存有与它 相同的缀一符串STRING。如果有,那么这个缀 一符串就变成前缀,继续输入新的字符;否则就把 这个缀一符串写到词典中生成一个新的前缀,并 给一个代码。
库的构建与实现[J].常熟理工学院学报,2006(2):
77—81.
[4] 伍庆华,吴国平,伍小荣.用VC开发DIB位图的一 般方法[J].现代电子技术,2002(1):36—40.
最后,通过OnDraw()消息函数调用DIB函 数库中定义的DrawImage()函数。
这样就完成了BMP的读取显示操作。具体 流程如图1所示。
3 VC++下LZW编码算法的实现过程
3.1 LZW的基本原理 LZW编码器使用了一种很实用的分析算法,
称为贪婪分析算法(greedy parsing algorithm。 GPA)。在贪婪分析算法中,每一次分析都要串行 地检查来自字符流的字符串,从中分析出已经识
在掌握bmp图像的具体格式后建立了dib函数库文件对即将使用的数据成员和函数成员进?了初始化设置然后在vc环境下上机调试并添加相应的消息映射函数独立实现了bmp图像的读取和显示操作最后在vc下实现bmp格式的图像向gif格式的转换
第29卷第12期
武汉理工大学学报·信息与管理工程版
文章编号:2007年12月
2 VC++下实现BMP图像的读取显示 利用Visual C++。实现BMP图像格式读取
显示与保存,采用VC+4-AppWizard[exe]单文 本文档应用程序。
首先,建立自己的DIB函数库,包括DIB.H 和DIB.CPP 2个文件。
其次,通过OnopenDocument()函数判断打 开文件是否成功。如果成功,则判断ReadDIB() 函数的DIB返回值是否为空,确定打开的是否为 BMP图像文件。如果返回值为空,则不是BMP 格式文件,提示“打开文件出错”;如果返回值不 为空,则打开的是BMP格式文件,那么程序就可 以向下执行。
2005.
[7] 崔春艳,李彩霞.基于DCT变换的数字图像压缩 技术及其Matlab实现[J].现代电子技术,2002 (9):6—9.
An Improved Image Compression Method and Its Realization Based on Matlab
Abstract:The algorithm of the JPEG image compression was introduced.A new JPEG compression method— pre—filtering before compressing was proposed,which can cope with the problem of impairing dependency of noised digital image.The new method was simulated under the environment of the experimentation with MAT- LA.The result indicates that the method can reduce the average length of code in situations when an image im— personal fidelity is superior to classical JPEG algorithm.Many simulation experiments show that the method proposed is simple and fast with few error8. Key words:Maflab;noise;JPEG;image compression CHEN Yong:Postgraduate;School of Information Engineering,WUT,Wuhan 430070,China.
初始化设置,为下一步编程做准备[3]。 其次,在掌握Lzw算法的基本原理的基础
上,在VC++条件下实现该算法,为对具体的图 像数据编码做准备。
最后,当以上2步工作做好后,找到DIB图像 数据,通过编码程序,将DIB图像数据变换成GIF 图像数据,同时要根据DIB文件包含的其他图像 信息完成GIF文件其他模块的生成∞J。
3.2 LZw编码算法的实现过程 示意代码如下:
InitializeStringTable();//初始字串表
WriteCode(LzW—CLEAR);//输出LzW—
CLEAR
Q=NULL;//初始化保留字串Q
//对输人每个字符循环操作
{
’
K=GetNextCharacter();//获取下一个字串 if Q+K is in string table//判断Q。+K是否 在字串表中 {n=Q 4-K;//将Q赋值给Q+K }
万方数据
24 武 虬伏汉理理上工八大.学子学.报手.傲信 ’11一=1思息刁与。管耳理理工上程任版臌
16位和32位位图),因为位图中的RGB值就代 表了每个像素的颜色。RGBQUAD结构描述由 R、G、B相对强度组成的颜色,定义如下:
typedef struct tagRGBQUAD{
BYTE rgbBlue; BYTE rgbGreen;
成员进行初始化,从而实现BMP图像的读取、显示和保存等相关操作。在理解Lzw编码算法原理的基础上,
在VC 4-+下实现该算法。同时,通过前面建立的BMP图像函数库,调用相关函数,就可以找到相应的具体的
图像数据,进而通过LZw编码将BMP图像数据转换成GIF图像数据,实现图像格式的转换。
关键词:BMP格式分析;图像格式转换;Lzw算法
图3转换前的BMP图片和转换后的GIF图片
图2 VC++下BMP转换成GIF的实现流程图
首先建立基本的函数库文件DIB.H、DIB. CPP和GIF.H、GIF.CPP函数库文件,对即将使用 的基本的DIB和GIF数据成员和函数成员进行
5 结论
首先进行的是BMP图像文件的读取显示部 分程序的编写。在掌握BMP图像的具体格式后, 建立了DIB函数库文件,对即将使用的数据成员 和函数成员进行了初始化设置,然后在VC++环 境下上机调试,并添加相应的消息映射函数,独立 实现了BMP图像的读取和显示操作,最后在Vc ++下实现BMP格式的图像向GIF格式的转换。
位图文件由4个部分组成:位图文件头、位图 信息头、调色板和图像数据。它具有如下所示的 形式:
(1)位图文件头。位图文件头包括文件类
型、文件大小和存放位置等信息,在Windows 3.0 以上版本位图文件中用BITMAPFILEHEADER结 构来定义:typedef strudt tagBITMAPFILEHEADER {
V01.29 No.12
基于VC++的BMP格式图像与GIF格式图像转换
‘韩 姣
(武汉理工大学信息工程学院,湖北武汉430070)
摘要:探讨了在VC++环境下BMP图像文件与GIF图像文件的转换。首先分析了BMP与GIF 2种图像的
具体格式,然后在VC++环境下建立自己的函数库文件D1B.H和DIB.CPP,对即将使用的数据成员和函数
UINT btType;DWORD bfSize;UINT bfRe· servedl;UINT bfReserved2;DWORD bfOffBits;
}BITMAPFILEHEADER; (2)位图信息头。位图信息头,用BITMAP. INFOHEADER结构定义。BITMAPINFOHEADER 结构包含有位图文件的大小、压缩类型和颜色格 式,其结构定义如下: typedef struct tagBITMAPINFOHEADER{
万方数据
25
第29卷第12期
韩姣:基于vc++的BMP格式图像与GIF格式图像转换
else
{ WriteCode(CodeFormString(Q));//输出字 符串Q的编码 AddTableEntry(Q);
Q=K:
} } WriteCode(CodeFromString(n));//输出字 符串n的编码 WriteCode(LzW—EOI);//输出结束标志
中图法分类号:TN919.8
文献标志码:A
图像是人类获取信息的主要途径。BMP图 像文件与GIF图像文件是2种基本的图像文件格 式。实现2种格式文件的相互转换符合现实需 要,已成为数字图像处理领域中亟待解决的问题, 具有很重要的研究价值。目前数字图像处理技术
的 应用相当广泛,技术也比较成熟。在图像编码
方面,常用的有哈夫曼编码、行程编码、Lzw编码 和JPEG编码。实现BMP与GIF的相互转换,首 先必须对BMP与GIF文件的格式进行分析,从而 实现两者的读取显示等相关操作,然后要对LzW 算法有明确的理解和把握。这样当找到图像数据 时,可以利用该算法将BMP文件转化成GIF文 件。同时,利用逆变换,也就是解码程序,可以实 现GIF转换成BMP。
1 BMP图像格式分析
BMP图形文件是Windows采用的图形文件 格式,在Windows环境下运行的所有图像处理软 件都支持BMP图像文件格式。Windows系统内 部各图像绘制操作都是以BMP为基础的。Win— dows 3.0以前的BMP位图文件格式与显示设备 有关,因此把这种BMP图像文件格式称为设备相 关位图DDB文件格式¨J。
..DWORD biClrlmportant; }BITMAPINFOHEADER; (3)调色板。调色板元素与位图所具有的颜
色数相同,像素的颜色用RGBQUAD结构来定义。 对于24位真彩色图像就不使用调色板(也包括
收稿日期:2007—06—15. 作者简介:韩姣(1982一),女,黑龙江大庆人.武汉理工大学信息工程学院硕士研究生 基金项目:武汉市科技攻关资助项目(105-650091).
4 VC++下BMP转换成GIF的实现
VC++环境下实现BMP向GIF转换,是基 于前面的BMP图像的读取显示保存操作和LZw 算法分析基础之上的,并同时要求分析GIF文件 的具体格式与读写方法。程序是基于vc++下 的多文本文档应用程序,具体流程如图2所示。
DWORD biSize; LONG biWidth:
LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizelmage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed;
BYTE rgbRed; BYTE rgbReserved;
}RGBQUAD; (4)位图数据。它是紧跟在调色板后的图像 数据字节阵列。图像的每一扫描行由表示图像像 素的连续的字节组成,每一行的字节数取决于图 像的颜色数目和用像素表示的图像宽度,扫描行 是由底向上存储的。这就是说,阵列中的第一个 字节表示位图左下角的像素。而最后一个字节表 示位图右上角的像素,对于用到调色板的位图,图 像数据就是该像素在调色板中的索引值,对于真 色彩图,图像数据就是实际的RGB值。同时,每 一扫描行的字节数必须是4的整倍数,也就是 DWORD对齐的心J。
[编辑:李道文]
(上接第25页)
参考文献:
高伟卫,杨胜强,张满栋.基于VC++6.0基础类库 的图像显示[J].机械管理开发,2006(5):62—65. [2] 郭伟斌,冯钿,罗文村,等.图像压缩转换技术机 理的研究[J].电脑开发与应用,2006(8):34—38. [3] 邬正义,张永跃,谈正.图像批量入库及图像数据
(下转第30页)
万方数据
30
武 氓从 汉理上 工八大予学子学1报医.’信旧息思与叫管目理理工上程任版 似
2007年12月
水印算法[J].武汉理工大学学报:信息与管理工程 版,2005。27(5):31—34. [6] 高守传,姚领田.Visual C++实践与提高数字图像 处理与工程应用篇[M].北京:中国铁道出版社,
图1 VC++F实现BMP图像的读取显不流程图
别的最长的字符串,也就是已经在词典中出现的
最长的前缀。用已知的前缀加上下一个输入字符 C,也就是当前字符作为该前缀的扩展字符,形成
新的扩展字符串一缀一符串。这个新的缀一符串 是否要加到词典中,还要看词典中是否存有与它 相同的缀一符串STRING。如果有,那么这个缀 一符串就变成前缀,继续输入新的字符;否则就把 这个缀一符串写到词典中生成一个新的前缀,并 给一个代码。
库的构建与实现[J].常熟理工学院学报,2006(2):
77—81.
[4] 伍庆华,吴国平,伍小荣.用VC开发DIB位图的一 般方法[J].现代电子技术,2002(1):36—40.
最后,通过OnDraw()消息函数调用DIB函 数库中定义的DrawImage()函数。
这样就完成了BMP的读取显示操作。具体 流程如图1所示。
3 VC++下LZW编码算法的实现过程
3.1 LZW的基本原理 LZW编码器使用了一种很实用的分析算法,
称为贪婪分析算法(greedy parsing algorithm。 GPA)。在贪婪分析算法中,每一次分析都要串行 地检查来自字符流的字符串,从中分析出已经识
在掌握bmp图像的具体格式后建立了dib函数库文件对即将使用的数据成员和函数成员进?了初始化设置然后在vc环境下上机调试并添加相应的消息映射函数独立实现了bmp图像的读取和显示操作最后在vc下实现bmp格式的图像向gif格式的转换
第29卷第12期
武汉理工大学学报·信息与管理工程版
文章编号:2007年12月
2 VC++下实现BMP图像的读取显示 利用Visual C++。实现BMP图像格式读取
显示与保存,采用VC+4-AppWizard[exe]单文 本文档应用程序。
首先,建立自己的DIB函数库,包括DIB.H 和DIB.CPP 2个文件。
其次,通过OnopenDocument()函数判断打 开文件是否成功。如果成功,则判断ReadDIB() 函数的DIB返回值是否为空,确定打开的是否为 BMP图像文件。如果返回值为空,则不是BMP 格式文件,提示“打开文件出错”;如果返回值不 为空,则打开的是BMP格式文件,那么程序就可 以向下执行。
2005.
[7] 崔春艳,李彩霞.基于DCT变换的数字图像压缩 技术及其Matlab实现[J].现代电子技术,2002 (9):6—9.
An Improved Image Compression Method and Its Realization Based on Matlab
Abstract:The algorithm of the JPEG image compression was introduced.A new JPEG compression method— pre—filtering before compressing was proposed,which can cope with the problem of impairing dependency of noised digital image.The new method was simulated under the environment of the experimentation with MAT- LA.The result indicates that the method can reduce the average length of code in situations when an image im— personal fidelity is superior to classical JPEG algorithm.Many simulation experiments show that the method proposed is simple and fast with few error8. Key words:Maflab;noise;JPEG;image compression CHEN Yong:Postgraduate;School of Information Engineering,WUT,Wuhan 430070,China.
初始化设置,为下一步编程做准备[3]。 其次,在掌握Lzw算法的基本原理的基础
上,在VC++条件下实现该算法,为对具体的图 像数据编码做准备。
最后,当以上2步工作做好后,找到DIB图像 数据,通过编码程序,将DIB图像数据变换成GIF 图像数据,同时要根据DIB文件包含的其他图像 信息完成GIF文件其他模块的生成∞J。
3.2 LZw编码算法的实现过程 示意代码如下:
InitializeStringTable();//初始字串表
WriteCode(LzW—CLEAR);//输出LzW—
CLEAR
Q=NULL;//初始化保留字串Q
//对输人每个字符循环操作
{
’
K=GetNextCharacter();//获取下一个字串 if Q+K is in string table//判断Q。+K是否 在字串表中 {n=Q 4-K;//将Q赋值给Q+K }
万方数据
24 武 虬伏汉理理上工八大.学子学.报手.傲信 ’11一=1思息刁与。管耳理理工上程任版臌
16位和32位位图),因为位图中的RGB值就代 表了每个像素的颜色。RGBQUAD结构描述由 R、G、B相对强度组成的颜色,定义如下:
typedef struct tagRGBQUAD{
BYTE rgbBlue; BYTE rgbGreen;
成员进行初始化,从而实现BMP图像的读取、显示和保存等相关操作。在理解Lzw编码算法原理的基础上,
在VC 4-+下实现该算法。同时,通过前面建立的BMP图像函数库,调用相关函数,就可以找到相应的具体的
图像数据,进而通过LZw编码将BMP图像数据转换成GIF图像数据,实现图像格式的转换。
关键词:BMP格式分析;图像格式转换;Lzw算法
图3转换前的BMP图片和转换后的GIF图片
图2 VC++下BMP转换成GIF的实现流程图
首先建立基本的函数库文件DIB.H、DIB. CPP和GIF.H、GIF.CPP函数库文件,对即将使用 的基本的DIB和GIF数据成员和函数成员进行
5 结论
首先进行的是BMP图像文件的读取显示部 分程序的编写。在掌握BMP图像的具体格式后, 建立了DIB函数库文件,对即将使用的数据成员 和函数成员进行了初始化设置,然后在VC++环 境下上机调试,并添加相应的消息映射函数,独立 实现了BMP图像的读取和显示操作,最后在Vc ++下实现BMP格式的图像向GIF格式的转换。
位图文件由4个部分组成:位图文件头、位图 信息头、调色板和图像数据。它具有如下所示的 形式:
(1)位图文件头。位图文件头包括文件类
型、文件大小和存放位置等信息,在Windows 3.0 以上版本位图文件中用BITMAPFILEHEADER结 构来定义:typedef strudt tagBITMAPFILEHEADER {
V01.29 No.12
基于VC++的BMP格式图像与GIF格式图像转换
‘韩 姣
(武汉理工大学信息工程学院,湖北武汉430070)
摘要:探讨了在VC++环境下BMP图像文件与GIF图像文件的转换。首先分析了BMP与GIF 2种图像的
具体格式,然后在VC++环境下建立自己的函数库文件D1B.H和DIB.CPP,对即将使用的数据成员和函数
UINT btType;DWORD bfSize;UINT bfRe· servedl;UINT bfReserved2;DWORD bfOffBits;
}BITMAPFILEHEADER; (2)位图信息头。位图信息头,用BITMAP. INFOHEADER结构定义。BITMAPINFOHEADER 结构包含有位图文件的大小、压缩类型和颜色格 式,其结构定义如下: typedef struct tagBITMAPINFOHEADER{
万方数据
25
第29卷第12期
韩姣:基于vc++的BMP格式图像与GIF格式图像转换
else
{ WriteCode(CodeFormString(Q));//输出字 符串Q的编码 AddTableEntry(Q);
Q=K:
} } WriteCode(CodeFromString(n));//输出字 符串n的编码 WriteCode(LzW—EOI);//输出结束标志
中图法分类号:TN919.8
文献标志码:A
图像是人类获取信息的主要途径。BMP图 像文件与GIF图像文件是2种基本的图像文件格 式。实现2种格式文件的相互转换符合现实需 要,已成为数字图像处理领域中亟待解决的问题, 具有很重要的研究价值。目前数字图像处理技术
的 应用相当广泛,技术也比较成熟。在图像编码
方面,常用的有哈夫曼编码、行程编码、Lzw编码 和JPEG编码。实现BMP与GIF的相互转换,首 先必须对BMP与GIF文件的格式进行分析,从而 实现两者的读取显示等相关操作,然后要对LzW 算法有明确的理解和把握。这样当找到图像数据 时,可以利用该算法将BMP文件转化成GIF文 件。同时,利用逆变换,也就是解码程序,可以实 现GIF转换成BMP。
1 BMP图像格式分析
BMP图形文件是Windows采用的图形文件 格式,在Windows环境下运行的所有图像处理软 件都支持BMP图像文件格式。Windows系统内 部各图像绘制操作都是以BMP为基础的。Win— dows 3.0以前的BMP位图文件格式与显示设备 有关,因此把这种BMP图像文件格式称为设备相 关位图DDB文件格式¨J。
..DWORD biClrlmportant; }BITMAPINFOHEADER; (3)调色板。调色板元素与位图所具有的颜
色数相同,像素的颜色用RGBQUAD结构来定义。 对于24位真彩色图像就不使用调色板(也包括
收稿日期:2007—06—15. 作者简介:韩姣(1982一),女,黑龙江大庆人.武汉理工大学信息工程学院硕士研究生 基金项目:武汉市科技攻关资助项目(105-650091).