位图传输的相关图像处理技术

2022-03-23 09:17:04 | 浏览次数:

摘要:本文主要介绍了位图在网络传输中的相关技术,其中包括一种新的位图压缩编码方法,一种将位图文件转化为可传输的数据流文件的方法,以及三种高速位图显示技术的特点和应用分析。

关键词:BMP文件压缩;位图显示实现;位图传输

中图分类号:TP751 文献标识码:A文章编号:1007-9599 (2010) 09-0000-02

Related Image Processing of Bitmap Transmission

Ma Xiaoyu,Cao Jie

(Guizhou University,Guiyang 550025,China)

Abstract:This paper introduces the technology associated with bitmap transmission in the network environment,including one new method of bitmap compression coding,one method of conversion between bitmap and transferred-stream and three method of bitmap display.

Keywords:BMP compression;Realization of BMP display;Bitmap transmission

近年来,随着电脑硬件技术的飞速发展和更新,计算机处理图形图像的能力大大增强,数字图像被应用在社会生活的各个方面。在图像技术发展过程中,出现了大量的图像存储格式。其中BMP文件格式作为Windows系统的标准图像格式随着Windows系统的普及而被广泛应用。本文首先介绍BMP位图格式,之后介绍了位图在传输中的相关图像处理技术,包括位图压缩,位图文件与可传输文件的转换和接收端位图高速显示的方法。

一、BMP文件格式

BMP文件格式是Microsoft公司为其Windows操作系统设置的标准图像格式,采取无损压缩的RLE编码格式,具有图像信息丰富,便于进行数字图像处理,被广泛兼容的优点。

BMP文件结构由四部分组成,分别为:位图文件头、位图文件信息头、文件调色板和BMP文件数据。

Windows的位图格式分为DDB(设备相关位图)和DIB(设备无关位图)这两类。

DDB格式是由BITMAP结构加上图像数据构成的,其中不包含调色板,所以该位图只能在同类设备中显示。不过Windows对此类位图的操作提供了大量的函数,在处理的速度等方面较有优势。

DIB位图格式由文件信息头、调色板入口、图像数据三部分组成。该位图格式因为有了调色板,所以具有设备无关性,适于网络传输,但是存储空间相对较大,占用更多的资源。

二、位图压缩技术

在Windows中默认的BMP压缩算法为RLE(行程编码)算法,针对的是图像数据部分。该算法属于无损压缩,其原理为:将图像中相邻的重复像素值用一个数字和该像素值来代替。该方法适用于有足够多连续像素串的图像文件,对于图像局部区域像素值变化频率高的图像文件压缩的效率很低,有些情况甚至不能起到压缩的效果。

在具体的应用中,采用将计数字节的前两位设置为1的方法与像素字节进行区分从而避免上述情况。但是这种方法由于有效地计数字节位只有六位,所以在处理大批量(>63)的重复像素值时需要更多的存储空间,从而降低了压缩的效率。

针对该问题,采用一种新的计数方法,将计数字节FF后的字节也作为计数字节用来存储>63的那部分重复像素的个数。在屏幕共享等条件下,位图文件中会出现大量一致的连续的像素值,因此用这种压缩方法可以起到更好的效果。

压缩算法的具体实现如下:

(一)读入BMP文件头等,获取位图数据部分,并存入BMP文件中非数据的信息部分;

(二)在内存中开辟一块缓冲区用来保存压缩后的位图数据;

(三)从位图数据区中按字节取出未压缩的位图数据,对于连续重复的像素值,记录其重复的次数iCount。判断是否iCount>=0xFF,若是则存入0xFF,并执行iCount=iCount-0x3F,之后再返回判断,若是,则存入0xFF,并执行iCount=iCount-0xFF,在返回判断,直到为否,则存储像素值。

(四)当像素值没有重复时,如果像素值小于等于0xC0,直接存入该像素值,否则先存入一个0xC1,然后再存入像素值,这样可以避免将该像素值作为数据长度的判断错误。

(五)将缓冲区中的数据以文件形式写入存储器,释放缓冲区。即可获得压缩好的BMP位图。

解压缩算法的具体实现是压缩算法的逆过程。

三、位图文件转化为数据流文件

位图文件位图文件在传输时如果不需要压缩,要在传输之前将文件转化为数据流的形式,用于实现位图数据的完整性,转换后的BMP位图包含设备信息,调色板,位图信息头,位图数据等内容,这些信息可以保证传输的位图文件可以在任何一台满足硬件条件的计算机上真实的再现。

转换实现主要包含以下几个步骤:

(一)初始化源位图文件,获得屏幕资源。

(二)获得源位图文件大小。

(三)创建新的位图文件并且获得指向其数据的指针。

(四)将源位图文件复制到目标位图文件中,之后释放资源。

四、位图高速显示技术

由于BMP应用的广泛性以及其便于进行数字图像处理的特点,人们在BMP文件的高速显示的问题上做了很多尝试。现在主要有三类实现方法:GDI图形设备接口、DrawDib函数组和DirectDraw。下面主要介绍了三种方法各自的特点,并进行了比较和分析。

(一)GDI图形设备接口

GDI可以处理各种图形图像,但是GDI只提供了访问系统主存的能力,而不提供直接访问显存的能力,并不能从具有某些加速特性的显卡中获得其优良特性。GDI提供了很多设备无关的图形接口,通过这些接口用户的应用程序可以操纵显示驱动接口DDI的驱动程序,而DDI则操作具体的图形硬件。当需要同时访问硬件底层和高层接口时,则GDI不支持对显示内存的直接访问就会对性能产生很大的影响。

在GDI的函数中可以对DDB位图操作的函数远远多于DIB位图,但是一般获取的图像都为DIB位图,所以需要先将DIB位图作为转化为DDB位图,再通过GDI中的BitBlt函数或者StretchBlt()函数直接显示。

具体的实现步骤如下:

1.从文件头获得DDB相关信息;

2.为DDB文件申请内存;

3.获得显示设备描述表,并以此通过CreatCompatibleDC()创建兼容的内存设备描述表;

4.用CreatCompatibleBitmap()函数穿件与设备描述表兼容的位图;

5.保存DIB指针,用GetSafeHDC()函数从内存设备中找出显示设备的句柄;

6.用CreatDIBitmap()函数创建DDB;

7.再创建一个相容设备内存,将从DIB得到的内存设备描述表粘到DDB的内存描述表中,选出内存描述表并在其中选出得到的DDB,最后返回DDB指针;

8.用BitBlt()直接显示。

(二)DrawDib函数组

Microsoft推出的关于数字视频的一个软件开发包VFM中提供了一组绘制DIB位图的高性能函数组——DrawDib函数组。DrawDib函数组提供了将图象拉伸和抖动的功能,支持图象的解压、数据流以及更多的显示适配器。DrawDid函数组是一组不依赖于图形设备接口(GDI)函数,而直接操作显存的函数组。

具体实现步骤如下:

1.通过使用DrawDibOpen函数初始化DrawDib函数组;

2.用DrawDibDraw函数将DIB绘至屏幕;

在这里需要特别说明的是DrawDib函数组可以用来显示位图序列。当DrawDibDraw函数同DrawDibBegin函数一起运用时,可以显示相同尺寸和格式的位图序列。

(三)DirectDraw

DirectDraw是DirectX技术的核心,它可以直接操作显示内存,进行硬件位转换操作,硬件覆盖操作和页面切换操作。

DirectX实际上是一个在Windows平台上的一个函数集。它允许用户去访问硬件的一些加速功能,而不需要编写任何与具体硬件相关的程序代码。为了实现操作与设备的无关性以及更好地兼容未来可能出现的新硬件,DirectX中有两个概念:HAL(Hardware-abstraction layer)和HEL(Hardware-emulation layer),即硬件抽象层和硬件仿真层。借助于他们,程序员完全与硬件隔离,如果使用硬件支持的功能就会调用HAL;如果使用的功能目前硬件还不支持,DirectX就调用HEL来模拟硬件不支持的功能以保证程序的正常运行。

以下部分是用Directdraw实现位图显示的实例。DirectDraw是以实现动画操作而见长的,因此在显示的过程中要用到页面翻转的概念。其具体实现步骤如下:

1.调用CreateWindowEx创建一个全屏的应用程序窗口。

2.用DirectDrawCreateEx函数创建DirectDraw对象。

3.调用SetCooperativeLevel函数设置协作模式,即是选择与GDI共享还是全屏模式;

4.调用SetDisplayMode函数设置显示模式;

5.调用CreateSurface函数建立主图面;

6.调用DDLoadPalette函数创建调色板,并调用主图面对象的SetPalette成员函数

7.调用DDReLoadBitmap函数将位图载入到主图面的后备图面;

8.在InitInstance函数中调用CreateSurface建立离屏图面,并调用InitSurfaces函数导入位图。

9.进行表面翻转操作,用BltFast函数将离屏图面blitting到后备缓冲区。

(四)三种技术的比较与分析

这三种技术都可以实现位图的显示,但是各有特点。三种方法与硬件关系的层次结构上如下图所示:

由上图可以看出,GDI不可以直接访问显卡,在面对数据量较大的位图或者位图序列时或者有硬件争抢设备接口时,其效率较低。DrawDib可以直接读写显卡缓冲区,不会造成硬件争抢资源,并且提供显示位图序列的功能,以及一些优化显示效果的函数。而DirectDraw和GDI一样利用硬件抽象层来控制硬件,但是由于其尽可能的利用硬件加速程序,因此可以很好的利用硬件资源,并且在硬件条件不支持的情况下,还可以利用现有硬件进行模拟,更扩展了该方法可以支持的硬件类型。

这三种方法虽然都可以实现位图的显示,但是这三种方法并不都是主要针对位图的。DrawDib方法是主要针对AVI视频流的函数,而DirectDraw方法是主要针对位图动画的操作。在具体的应用中应该根据实际需要对其进行恰当的选择。具体来说,在远程屏幕共享的应用中,用于接收端的位图显示方法,应该选择DrawDib函数组来实现,因为所获得的位图是规格、调色板等都一直的位图序列,Drawdid函数支持图像解压缩、数据流和大量的显示适配器,可以对图形进行淡化处理。

五、总结

本文就位图格式,位图传输中的压缩技术,位图文件转换为可传输数据流文件的技术,以及位图高速显示技术进行了详细的阐述,给出了位图传输应用中的整体技术框架,详细描述了几种解决方案的特点。

参考文献:

[1]高伟卫,杨胜强,张满栋.基于VC++6.0基础库类的图像显示[J].《机械管理开发》.2006,(5)10;84

[2]徐慧.《Visual C++数字图像实用工程案例精选》[M].北京:人民邮电出版社.2004:1

[3]王敏.童小念.用Visual C++实现位图图像的压缩[J].计算机应用与软件.2003,8;

[4]邱忠权,彭强.在Windows系统中实现视频图像的高速显示[J].信息技术.2002,(26)12;5

[5]Julio Sanchez,Maria P.Canton,Windows图形编程,罗骏等译.北京:清华大学出版社.2000

作者简介:马晓昱(1984.5-),女,现于贵州大学计算机科学与信息学院攻读硕士学位,研究方向为数字图像处理技术;曹洁(1981.11-),女,现于贵州大学计算机科学与信息学院攻读硕士学位,研究方向为数字图像处理技术。

基金项目:贵阳市产学研项目(2008工合字24-4号);贵阳市大学生创业资金项目((2009大合字1号)

推荐访问: 位图 图像处理 传输 相关 技术