视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
一种显示JPEG和GIF格式图像的简便方法及实现
2025-09-26 09:09:31 责编:小OO
文档
第32卷第3期应 用 科 技Vo.l 32, .32005年3月Applied Science and Techno l o gy M ar .2005

文章编号:1009-671X (2005)03-0055-02

一种显示JPEG 和G I F 格式图像的简便方法及实现

雷建忠,霍滨焱,张 菁

(哈尔滨工程大学计算机科学与技术学院,黑龙江哈尔滨150001)

摘 要:JPEG 和G IF 格式图像在保证图像显示质量的条件下同时兼有较高的压缩率,从而得到了广泛的应用.用JPEG 和G IF 格式图像替代没有任何压缩的B M P 格式图像在V i sual C++中的应用,降低了程序的时空开销.以J PEG 格式图像的显示为例,介绍一种利用IP i cture 的COM 接口显示此格式图像的简便方法及实现,并给出了相应的显示结果.

关 键 词:V is ua l C++;J PEG;G IF ;IP i c t ure 中图分类号:TP311 文献标识码:A

收稿日期:2004-05-26.

基金项目:黑龙江省自然科学基金资助项目(F0201).

作者简介:雷建忠(1980-),男,硕士研究生,主要研究方向:虚拟现实、图像处理.

A met hod of dis playi ng JPEG and GI F for mat i m ages and its i m pl e ment ation

LE I Jian z hong ,HUO B in yan ,Z HANG Ji n g

(Schoo l o f Compu ter Sc i ence and T echno logy ,H arb i n Eng i neer i ng U n i versity ,H arb i n 150001,China)

Abst ract :JPEG and G I F for m at i m ages have broad applicati o ns because they have good vision qua lity and h igh co m pression rati o .JPEG and G I F for m at i m ages substitute for B M P f o r m at i m agesw it h out any co m pression i n V isu al C ++,w hich can decrease t h e expenditure of prog ra m ti m e and space .Tak i n g the display o f a JPEG fo r m at i m age as an exa mp le ,a si m ple m ethod is presented for usi n g COM i n terface o f I Picture to d isplay i m ages .Corre spond i n g display resu lts are g i v en.

K ey w ords :V isua lC ++;JPEG ;G I F ;I P ict u re JPEG 图像格式采用十分先进的压缩技术,它用

有损压缩的方式去除冗余的图像和彩色数据,获取极高压缩率的同时能展现十分丰富生动的图像,即用较少的磁盘空间得到较好的图像质量,成为网络最受欢迎的图像格式.G I F 格式虽然仅支持256色,但它对于颜色较少的图像有着很高的压缩率,甚至超过JPEG 标准,在彩色动画方面得到了广泛的应用.可作为图像处理的重要开发工具的V isual C ++(VC )6.0的MFC 库仅对没有经过任何压缩的B M P 位图文件有着良好的支持,由于B MP 格式的图像没有经过任何的压缩,不论是作为程序的外部文件,还是作为程序的内部资源都要占据大量的空间,尤其是后者会大大增加可执行文件的长度.可以看出,若用具有较好压缩率的JPEG 或G I F 格式图像替代B M P 图像在VC 中的应用,无疑还是很有实用价值的.

1 设计原理

现在虽然有许多处理和显示JPEG 、G I F 格式图像的Acti v e X 控件,但多数实现代码过于复杂而且使用不太方便.借助于I P ict u re 的C OM 接口简化了J PEG 、G I F 格式图像在VC 开发环境下的显示.

I Picture 接口是一种管理图像对象及其属性的接口,其中的图像对象为位图、图标及图元等提供了一种与语言无关的代码抽象.如同标准字体对象一样,系统提供了对图像对象的标准实现.图像对象的主要接口包括I Picutre 、I P icture D isp ,后者从I D is pa tch 派生,此接口允许通过OLE 的方法来访问图像的属性,因此I P icture 接口需由具有OLE 的图像对象实现.另外,图像对象还支持I PersistStrea m 接口,因此它能读写I S trea m 接口的实例.任何对象均可使用图像对象来读写图像并把它作为对象持久化的一部分,而实用函数O le LoadP icutre 简化了基于流

2 具体实现

2.1 工程项目类型选择

打开VC开发环境,单击F ile→N e w Pro jects选择W i n32Applicati o n,然后再选择A si m ple W i n32Ap plicati o n,单击F i n ish按钮即可.

2.2 添加资源文件

为了说明方便,以JPEG格式为例说明.在2.1所建工程的目录下新建一个R esource目录,在Re source目录放置一幅需要显示的图像(如flo w er. j p g),选择工作区中的F il e选项卡,右键单击Re source Files,选择A dd F iles to Folder...,在弹出的对话中文件类型选择Resource File,导入R esource 目录下的fl o w er.j p g资源图像文件,保存资源类型为JPG,资源的I D记为I D R_FLOWER.要想显示GI F格式的图像,只需在导入时选择一幅G I F格式的图像.

2.3 编码实现

为了方便扩展,定义了一个P ict u res结构体,对图像对象的各种属性进行了封装.具体的结构成员如下:

struct Pictures{

I Picture*Picture;//图像接口指针

long Picture W itdh;//图像的宽度

long Picture H e i g h;t//图像的高度

i n t PositionX;//距父窗口左侧的距离

i n t PositionY;//距父窗口顶端的距离

OLE XSI ZE H I M ETR I C cx;//源图像上水平拷贝的数量

OLE YSI ZE H I M ETR I C cy;//源图像上垂直拷贝的数量

};

主要的实现过程包括3步:1)搜索指定类型的图像资源;2)以流的方式载入搜索到的图像;3)在设备环境中绘制图像.

vo id AddPicture(H WND h W nd,i n t R esource H andle, i n t PositionX,i n t PositionY)

{

HRES res;

res=FindResource(GeM t odule H and le(NULL), MAKE I NTRESOURCE(Resource H andle), J PG );

//从资源文件中查找资源类型为 JPG 且I D号为Resource H and le的资源

pP ict u re >Picture=LoadP i c ture(h W nd,(char *)data,sz,&pPicture >Picture W i d th,&pP icture >Picture H eigh,&pPicture >cx,&pP icture >cy);

}

I Picture*LoadP ict u re(HWND h W nd,char*data, size t len,long*ret w,l o ng*ret h,OLE XS I ZE H I METR I C*cx,OLE YSI ZE H I M ETR I C*cy)

{

I Picture*pic=NULL;

LPSTREAM pStrea m=NULL;

C reateStrea mOn HG lobal(hG l o ba,l TRUE,

&pS trea m);

O le LoadPicture(pStrea m,0,FALSE,II D I P i c ture,(vo i d**)&pic);//载入图像

}

vo i d Repaint P ict u res(HDC dc R epa i n tPictures)

{

pPicture >P icture >R ender(dc R epa i n tPictures, bounds.lef,t bounds.botto m,bounds.ri g ht bounds. lef,t bounds.top bounds.botto m,0,0,pPicture > cx,pP icture >cy,NULL);//在设备环境指定的矩形区绘制图像

}

程序执行后显示结果如1所示.

图1 显示结果

3 结 论

实现了单幅图像的显示,一次显示多幅图像可以修改Pictures结构体,形成一个链表.另外,经测试,本程序除了能显示JPEG、G I F格式图像之外,还能显示B M P格式的图像.

参考文献:

[1]潘爱民,王国印.VC++技术:4版[M].北京:清华大学

出版社,1999.

[2]电脑编程技巧与维护杂志社.VC编程精选集锦数据库

及图形图像分册[M].北京:科学出版社,2003.

[责任编辑:李雪莲]

56

应 用 科 技 第32卷下载本文

显示全文
专题