2024年4月30日发(作者:)

Computer

与技术

电脑知识

与技术

Computer

Knowledge

Knowledge

and

and

Technology

Technology

电脑知识

Vol.5,No.27,

September

2009,pp.7734-7735

7740

ISSN1009-3044

E-mail:eduf@

5

卷第

27

(2009

9

)

Tel:+86-551-569

基于VC++6.0的透明图像制作处理的研究

梅元昭

(遵义职业技术学院,贵州遵义

563000

摘要:利用操作系统的

GDIAPI

来制作透明图像,通过这个功能可以达到多张图片的色彩混合,能实现较高级系统中的类似接口的

功能。

关键词:位图;像素;分辨率;颜色通道;

RGB

中图分类号:

TP312

文献标识码:

A

文章编号:

1009-3044(2009)27-7734-02

TheResearchandApplicationBasedonVC++6.0

MEIYuan-zhao

(ZunyiVocationalandTechnicalCollege,Zunyi563000,China)

Abstract:GDIAPItousetheoperatingsystemtocreatetransparentimages,thisfeaturecanbeachievedthroughmultiplepicturesofthe

colormixing,toachievehighersysteminterfacesimilarfunctions.

Keywords:bitmap;pixel;resolution;colorchannel;RGB

制作透明位图并不容易,一般的方法是取出位图的各个像素点,将各个像素点的

RGB

值乘以透明度百分比,然后将它放到一

个数组中,再取出背景图与位图重叠部分的像素点,将各点的

RGB

值乘以透明度百分比。存入另一个数组中,将两个数组相加,得

到色彩值。

获得目标和源的像素位,计算出最终的该位置的图像色彩,这种方式是大多数图形处理软件处理的方法,通过对它的了解可以

掌握常见的图像处理方法。

1

主要基础技术知识

1.1

位图基础

位图就是存贮于电脑中的图片。位图文件有常见格式有

.BMP

.JPG

.GIF

.PIC

等,但

Windows

仅支持

WindowsBitmapGraphics

格式,即

BMP

文件。

1.1.1

位图

位图

(Bitmap)

:位图图形也称为光栅图形,由排列为矩形网格形式的小方块(像素)组成。简单地说,位图就是以无数的色彩点组

成的图案。

位图图像用图像的宽度和高度来定义,以像素为量度单位,每个像素包含的位数表示像素包含的颜色数。在使用

RGB

颜色模

型的位图图像中,像素由三个字节组成:红、绿和蓝。每个字节包含一个

0

255

之间的值。将字节与像素合并时,它们可以产生与

艺术混合绘画颜色相似的颜色。

位图图像的品质由图像分辨率和颜色深度位值共同确定。分辨率与图像中包含的像素数有关。像素数越大,分辨率越高,图像

也就越精确。颜色深度又叫色彩位数,与像素可包含的信息量有关。即位图中要用多少个二进制位来表示每个点的颜色,是分辨率

的一个重要指标。常用有

1

位(单色),

2

位(

4

色,

CGA

),

4

位(

16

色,

VGA

),

8

位(

256

色),

16

位(增强色),

24

位和

32

位(真彩色)等。

因此,色深高的位图像与色深低度的位图像相比,其阴影具有更高的平滑度。由于位图图形跟分辨率有关,因此不能很好地进行缩

放。

1.1.2

重要术语及概念

颜色通道:通常,将颜色表示为几种基本颜色的混合颜色,通常是红色、绿色和蓝色。每种基本颜色都视为一个颜色通道;每个

颜色通道中的颜色量混合在一起可确定最终颜色。

颜色深度:也称为“位深度”,指专门用于每个像素的计算机内存量,因而可以确定图像中可以显示的可能颜色数。

像素:位图图像中的最小信息单位,实际上就是颜色点。

分辨率:图像的像素尺寸,它决定图像中包含的精细细节的级别。分辨率通常表示为用像素数表示的宽度和高度。

RGB

颜色:一种配色方案,其中每个像素的颜色均表示为红、绿和蓝色值的混合颜色。

1.2

位图显示

计算机中使用的位图最终是

BMP

文件。使用位图最简单的方法就是把它定义在资源文件(

.rc)

中。定义的方法有两种。一种方

法是把它定义为整数宏,具体如下:

#defineIDB_MYBITMAP100

IDB_MYBITMAPBITMAP"c:"

收稿日期:

2009-07-23

作者简介:梅元昭(

1973-

),男,贵州遵义人,讲师,硕士,研究方向为计算机软件与理论。

7734

人工智能及识别技术

本栏目责任编辑:唐一东

5

卷第

27

(2009

9

)

另一种方法是给它起一个名字,也就是把它定义为字符串,具体如下

:

MyBitMapBITMAP"c:"

两种方法效果是一样的。

接着就是把它显示在窗口的客户区上。使用

API

函数

LoadBitmap

取得位图句柄,下面是

LoadBitmap

函数的完型:

HBITMAPLoadBitmap(HINSTANCEhInstance,LPSTRlpBitmapName)

该函数返回一个位图句柄。函数有两个参数,其中

hInstance

是程序句柄。

lpBitmapName

是位图名字的指针(适用于第二种定义

方法)。如果你使用了第一种定义方法,你可以填入指向位图的值或整数宏(对应上例这个值就是

100

,整数宏是

IDB_MYBITMAP)

如果在其它消息中则可以用

API

函数

GetDC

获得。创建这个

DC

的内存映像。这样做的目的是建立一张“隐藏的画纸”,把位图

“画”在上面,作缓冲之用。完成这项工作后,我们就通过一个函数把“画纸”上的位图复制到真正的

DC

中。这就是在屏幕上快速显示

图象的双缓冲技术。这张“画纸”用

API

函数

CreateCompatibleDC

建立,下面是它的完型:

HDCCreateCompatibleDC(HDChdc)

如果函数执行成功,将返回

DC

内存映像即“画纸”的句柄。

现在我们已经有了“画纸”,可以把位图画在上面了。这可以通过

API

函数

SelectObject

完成,其中第一个参数是“画纸”的句柄,

第二个参数则是位图的句柄,下面是函数的完型:

HGDIOBJWINAPISelectObject(HDC,HGDIOBJ)

现在位图已经画在“画纸”上了。下一步我们要把位图复制到真正的

DC

中。

有很多

API

函数都能完成这项工作,例如

BitBlt

StretchBlt

。函数

BitBlt

仅仅将一个

DC

的内容简单地复制到另一个

DC

中,而

函数

StretchBlt

则能够自动调整源

DC

复制内容的大小已适应目的

DC

的输出区域大小,因此前者比后者速度更快。

在这里我们只使用函数

BitBlt

,下面是它的完型:

BOOLBitBlt(intx,inty,intnWidth,intnHeight,

CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);

x

y

表示矩形的左上角的坐标

nwidth

nheight

是表示矩形图的宽和高

pSrcDC

是设备上下文的指针

xSrc

ySrc

是位图的坐标

dwROP

屏面运算码(

ROP

)。该参数用以确定复制内容的颜色与输出区域原来的颜色按哪种运算方式处理。通常,只需要简单地

用复制内容把输出区域覆盖掉。

一切办妥后,就用

API

函数

DeleteObject

释放位图对象,也就是把位图“抹掉”。

2

软件实现原理及实现方式

2.1

窗口中多个图片的混合

2.1.1

绘制像素函数

原型:

COLORREFSetPixel(intx,inty,COLORREFcrColor);

参数说明:

SetPixel

函数中,

COLORREF

32

位颜色数据类型;第一和第二个参数

x

y

是像素点位置的逻辑坐标值,第三个

参数

crColor

是像素点的颜色值,

COLORREF

型变量可以利用

RGB

bRed

bGreen

bBlue

)来指定相应的颜色值,每种颜色用一

个字节表示,可以被设定为

0~255

之间的任意值,

0

代表无色,

255

代表全色。

2.1.2

获取像素颜色函数

原型:

COLORREFGetPixel

intx

inty

const

参数说明:得到指定像素的

RGB

颜色值,本函数是常成员函数。

2.2

相应的实现核心代码

//

设置两张图片的色彩混合

COLORREFc,f,ff;//c

为前景图像色彩,

f

为前景图像应屏蔽的色彩

POINTp;

f=el(2,2);//

获取前景要屏蔽的色彩

for(inti=0;i

for(intj=0;j

c=el(i,j);

p.x=100+i;p.y=100+j;//100

为前景在背景中的水平位置和垂直位置

if(c==f)

//

前景屏蔽的色彩用背景图像的色彩填充

el(CPoint(i,j),el(p));

Else{//

前景图像的色彩与背景图像的色彩混合

ff=el(p);

unsignedchar*a,*b;

a=(unsignedchar*)&c;b=(unsignedchar*)&ff;

a[0]=a[0]*m_pa/100+b[0]*(100-m_pa)/100;

a[1]=a[1]*m_pa/100+b[1]*(100-m_pa)/100;

a[2]=a[2]*m_pa/100+b[2]*(100-m_pa)/100;

el(CPoint(i,j),c);}}

pDC->BitBlt(100,100,h,ht,&MemDC1,0,0,SRCCOPY);

本栏目责任编辑:唐一东

(下转第

7740

页)

人工智能及识别技术

7735

ComputerKnowledgeandTechnology

电脑知识

与技术

5

卷第

27

(2009

9

)

将(

11

)代入

J(k)

,得到二次规划问题求解的一个标准形式:

其中

这里

H(k)

为正定的

Hessian

矩阵。于是在满足控制约束的条件下,通过在每一个采

样时刻对目标函数

J

*

(k)

迭代求解,从而可获得其控制律。

3

实验结果与分析

设定最大线速度

v=1m/s

,自转角速度

ω=0.6rad/s

,轮速

准≤38rad/s

,预测时域

N=3

以椭圆形曲线作为实验轨迹。图

3

、图

4

分别给出了轨迹跟踪效果以及各轮速度的试验

结果。

3

机器人轨迹跟踪效果

4

结束语

本文研究了四轮全向移动机器了移动机器人的轨迹跟踪控制问题。由于非线性模

型预测控制需要较大的计算量。为了提高机器人的实时性,采用线性化误差模型,从而

将所求解的优化问题转化为二次规划问题,通过迭代求解来获取控制序列,从而有效减

低了计算量。实验结果表明了该方法对全向移动机器人轨迹跟踪控制的有效性。

参考文献:

[1],,r,horizonnonlinearpredictivecontrol

byTaylorapproximation:Applicationtorobottrackingtrajectory[J].AppliedMathematics

4

机器人轮速

andComputerSciences,2005,15(5):527-540.

[2]GianLucaMariottini,GiuseppeOriolo,-TimeIdentification

andPredictiveControlofFastMobileRobotsUsingGlobalVisionSensing[J].IEEETRANSACTIONSONROBOTICS,2007,23(1):

87-100.

[3]DongbingGu,predictivecontrolforaCar-likemobilerobot[J].RoboticsandAutonomousSystems,2002,39(2):

73-86.

[4]

席裕庚

.

动态不确定环境下广义控制问题的预测控制

[J].

控制理论与应用

,2000,17(5):665-670.

(tiveControlofGeneralControlProblemsunderDynamicUncertainEnvironment[J].ControlTheoryandApplications,2000,

17(5):665-670.)

[5]KKanjanawanishkul,butedModelPredictiveControlforCoordinatedPathFollowingControlofOmnidirectionalMobile

Robots[C].ProceedingsofIEEEInternationalConferenceonSystems,Man,ore,2008:3120-3125.

[6]FengXie,izationofNonholonomicRobotFormations:AFirst-StateContractiveModelPredictiveControlApproach

[J].JournalofComputingandInformationTechnology,2009,17(1):37-50.

[7]

苏成利

.

非线性模型预测控制的若干问题研究

[D].

浙江

:

浙江大学

,2006.

(上接第

7735

页)

3

结束语

对于

windows2000

以上的系统来讲,系统提供了接口函数

AlphaBlend

SetLayeredWindowAttributes

都能让图片透明,我们这

里可以既可达到

AlphaBlend

的色度递减与背景溶合,又可以达到

SetLayeredWindowAttributes

透明,只是要拿到的相应显示硬件的

图像表示部分即可。这充分的说明了使用系统的公共的低级接口方法可以让系统实现高档的系统接口方法。

参考文献:

[1]

杨淑莹

,

边奠英

.VC++

图像处理程序设计

[M].

北京:清华大学出版社

,2003:18-22.

[2]API

画透明位图

[EB/OL].(2009-03-26).http:/Program/VC/VCJC/Program_.

7740

人工智能及识别技术

本栏目责任编辑:唐一东