📄 visual c++实现视频图像处理技术2.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.yesky.com/20020406/1605701_1.shtml -->
<HTML xmlns="http://www.w3.org/TR/xhtml1/strict"><HEAD><TITLE>Visual C++实现视频图像处理技术</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GB2312"></META><LINK
href="Visual C++实现视频图像处理技术2.files/cpcw.css" rel=stylesheet></LINK>
<STYLE>.nava {
FONT-SIZE: 9pt
}
</STYLE>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR></META>
<SCRIPT language=JavaScript>function sendemail(){ OpenWindow = window.open('http://other.chinabyte.com/chinabyte/qin/sendemail.shtm?url=http%3A%2F%2Fwww.yesky.com/20020406/1605701.shtml&title=Visual C++实现视频图像处理技术&channel=9','emailwin','toolbar=no,location=no,scrollbars=no,menubar=no,width=462,height=450')}</SCRIPT>
</HEAD>
<BODY bgColor=#ffffff leftMargin=0 topMargin=2 marginheight="0" marginwidth="0">
<DIV align=center>
<SCRIPT src="Visual C++实现视频图像处理技术2.files/y_head0603.js"></SCRIPT>
<SCRIPT src="Visual C++实现视频图像处理技术2.files/headlink0603.js"></SCRIPT>
<TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#979797 border=0>
<TBODY>
<TR>
<TD width=10></TD>
<TD width=536><SPAN class=nava><FONT color=#ffffff>您现在的位置是: </FONT><A
href="http://www.yesky.com/72339069014638592/index.shtml"><FONT
color=#ffffff>软件</FONT></A><FONT color=#ffffff> > </FONT><A
href="http://www.yesky.com/72342367549521920/index.shtml"><FONT
color=#ffffff>开发者网络</FONT></A><FONT color=#ffffff> > </FONT><A
href="http://www.yesky.com/72342371844489216/index.shtml"><FONT
color=#ffffff>程序方舟</FONT></A><FONT color=#ffffff> > </FONT><A
href="http://www.yesky.com/72342371928375296/index.shtml"><FONT
color=#ffffff>开发专栏</FONT></A><FONT color=#ffffff> > </FONT><A
href="http://www.yesky.com/72342371928702976/index.shtml"><FONT
color=#ffffff>Visual C++开发</FONT></A><FONT color=#ffffff> >
</FONT><FONT color=#ffffff>正文</FONT></SPAN></TD>
<TD width=214 bgColor=#f7f7f7><IMG height=22
src="Visual C++实现视频图像处理技术2.files/content-1.gif"
width=214></IMG></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#f7f7f7 border=0>
<TBODY>
<TR>
<TD width=149 height=10></TD>
<TD width=1 background="Visual C++实现视频图像处理技术2.files/content-3.gif"
height=10></TD>
<TD width=610 height=10></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#f7f7f7 border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle width=149>·<A
href="http://www.chinabyte.com/20020731/1623017.shtml">速成电脑精英(包分配)白领高薪一族从这里开始</A></TD></TR>
<TR>
<TD vAlign=top align=middle width=149><IFRAME
src="Visual C++实现视频图像处理技术2.files/scolumn.htm" frameBorder=0 width=120
scrolling=no height=500></IFRAME><BR><BR>
<SCRIPT src="Visual C++实现视频图像处理技术2.files/140_250.js"></SCRIPT>
<BR>
<TABLE cellSpacing=0 cellPadding=0 width=135 border=0>
<TBODY>
<TR>
<TD width=30 bgColor=#3d7b7b><IMG height=17
src="Visual C++实现视频图像处理技术2.files/content-2.gif" width=24
align=absMiddle></IMG></TD>
<TD class=nava align=middle width=105 bgColor=#a0d0d0><A class=A1
href="http://www.yesky.com/72348964619288576/index.shtml"><FONT
color=#000000>T O P 排 行</FONT></A></TD></TR>
<TR>
<TD vAlign=top align=middle width="6%" bgColor=#ebebeb>-</TD>
<TD width="94%" bgColor=#ebebeb><A
href="http://www.yesky.com/20030110/1647918.shtml">Java套接字编程(下)</A><BR></TD></TR>
<TR>
<TD vAlign=top align=middle width="6%" bgColor=#ebebeb>-</TD>
<TD width="94%" bgColor=#ebebeb><A
href="http://www.yesky.com/20030108/1647533.shtml">MediaStudio Pro
6.5教程</A><BR></TD></TR>
<TR>
<TD vAlign=top align=middle width="6%" bgColor=#ebebeb>-</TD>
<TD width="94%" bgColor=#ebebeb><A
href="http://www.yesky.com/20030103/1646964.shtml">三款卸载软件最新试用</A><BR></TD></TR>
<TR>
<TD vAlign=top align=middle width="6%" bgColor=#ebebeb>-</TD>
<TD width="94%" bgColor=#ebebeb><A
href="http://www.yesky.com/20030102/1646785.shtml">基于Visual
C++的Winsock API研究</A><BR></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=0 cellPadding=0 width=135 border=0>
<TBODY>
<TR>
<TD width=30 bgColor=#3d7b7b><IMG height=17
src="Visual C++实现视频图像处理技术2.files/content-2.gif" width=24
align=absMiddle></IMG></TD>
<TD class=nava align=middle width=105 bgColor=#a0d0d0><A class=A1
href="http://training.yesky.com/"><FONT color=#000000>网 校 热
门</FONT></A></TD></TR></TBODY></TABLE>
<SCRIPT src="Visual C++实现视频图像处理技术2.files/softyesky.js"></SCRIPT>
</TD>
<TD width=1 background="Visual C++实现视频图像处理技术2.files/content-3.gif"></TD>
<TD vAlign=top align=middle>
<TABLE cellSpacing=2 cellPadding=0 width=550 border=0>
<TBODY>
<TR>
<TD align=middle><B><FONT class=BHEAD color=#333399>Visual
C++实现视频图像处理技术</FONT></B></TD></TR>
<TR>
<TD bgColor=#bbbbbb height=1></TD></TR>
<TR>
<TD align=middle><FONT face="Arial, Helvetica, sans-serif"><SPAN
class=nava>2002-04-06· ·刘 涛··yesky<BR><BR></SPAN></FONT></TD></TR>
<TR>
<TD>
<P align=right><FONT color=red><A
href="http://www.yesky.com/20020406/1605701.shtml">上一页</A> <A
href="http://www.yesky.com/20020406/1605701.shtml">1</A> 2
</FONT></P><SPAN class=txt> <FONT
color=#ac000><B>视频"画中画"技术</B></FONT>
<P></P>
<P> "画中画"这个概念类似与彩色电视机"画中画",就是在一幅大的图像内显示另外一幅内容不同的小的图像,小图像的尺寸大小一般地说为大图像尺寸的1/4或1/9,显示位置在大图像的右上角。这种技术不仅在电视技术中,在可视电话系统也可以发现这种技术的身影,它们都是依靠硬件来实现的,但是如何在VC开发平台上用编程语言来将该功能添加到自己开发的视频监控软件,为使用者提供更大的信息量呢?也许读者最容易想到的是首先显示大图像,然后再在一个固定位置画第二幅小图像,这种技术技术如果对于静止图像当然没有问题,但是对于视频流,由于每一秒钟需要画25幀,即25幅图像,这样一来计算机需要不停的画不停的擦除,会给用户以闪烁的感觉,如何解决这个问题呢?有的参考书上将大小图像分快显示,这种方法要将待显示的图像数据与显示位置的关系对应起来,容易出错不说,而且麻烦,且速度慢,为此,我对该方法进行了改进,得到了满意的效果。实现的代码如下:<BR><BR></P>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>
<P>void pictureinpicture( )<BR>{<BR>………………………..<BR>CBitmap
bitmap,*oldmap;<BR>pData1=(BYTE*)new char[biWidth*biHeight
*3];//biWidth和biHeight为视频采集卡获取//的图像尺寸。
<BR>Read(pData1,bih.biWidth*bih.biHeight
*3);//该函数从采集卡中获取数据<BR>CClientDC dc(this);<BR>m_pBMI1= new
BITMAPINFO;//自定义的BMP文件信息结构,用于后面的图像显示<BR>m_pBMI1->bmiHeader.biBitCount=24;<BR>m_pBMI1->bmiHeader.biClrImportant=0;<BR>m_pBMI1->bmiHeader.biClrUsed=0;<BR>m_pBMI1->bmiHeader.biCompression=0;<BR>m_pBMI1->bmiHeader.biHeight=biHeight;<BR>m_pBMI1->bmiHeader.biPlanes=1;<BR>m_pBMI1->bmiHeader.biSize=40;<BR>m_pBMI1->bmiHeader.biSizeImage=WIDTHBYTES(biWidth*8)*biHeight*3;<BR>m_pBMI1->bmiHeader.biWidth=biWidth;<BR>m_pBMI1->bmiHeader.biXPelsPerMeter=0;<BR>m_pBMI1->bmiHeader.biYPelsPerMeter=0;<BR>////////////////////////////////////////////////////////////////////////
<BR>pData2=(BYTE*)new char[biWidth1*biHeight1
*3];//申请存放小图像的缓冲区<BR>Read(pData2,biWidth1*biHeight1
*3);////向该缓冲区读数据<BR>m_pBMI2= new
BITMAPINFO;<BR>m_pBMI2->bmiHeader.biBitCount=24;<BR>m_pBMI2->bmiHeader.biClrImportant=0;<BR>m_pBMI2->bmiHeader.biClrUsed=0;<BR>m_pBMI2->bmiHeader.biCompression=0;<BR>m_pBMI2->bmiHeader.biHeight=biHeight1;<BR>m_pBMI2->bmiHeader.biPlanes=1;<BR>m_pBMI2->bmiHeader.biSize=40;<BR>m_pBMI2->bmiHeader.biSizeImage=WIDTHBYTES(biWidth1*8)*biHeight1*3;<BR>m_pBMI2->bmiHeader.biWidth=biWidth1;<BR>m_pBMI2->bmiHeader.biXPelsPerMeter=0;<BR>m_pBMI2->bmiHeader.biYPelsPerMeter=0;<BR>//下面实现画中画的显示</P>
<P>CDC
MemDc;<BR>MemDc.CreateCompatibleDC(&dc);<BR>bitmap.CreateCompatibleBitmap(&dc,biWidth,biHeight);<BR>oldmap=MemDc.SelectObject(&bitmap);<BR>::StretchDIBits(MemDc.m_hDC,0,0,biWidth,biHeight,0,0,—biWidth,biHeight,pData1,m_pBMI1,DIB_RGB_COLORS,SRCCOPY);//首先将大图像画在内寸上下文中<BR><BR>::StretchDIBits(MemDc.m_hDC,20,20,biWidth1,biHeight1,_<BR>0,0,biWidth1,biHeight1,pData2,m_pBMI2,DIB_RGB_COLORS,SRCCOPY);//再将小图像画在内寸上下文中<BR><BR>::StretchBlt(dc.m_hDC,0,0,bih.biWidth,bih.biHeight,_<BR>MemDc.m_hDC,0,0,bih.biWidth,bih.biHeight,SRCCOPY);//将结果显示在屏幕上。</P>
<P>MemDc.SelectObject(oldmap);<BR>delete pData1;<BR>delete
m_pBMI1;<BR>delete pData2;<BR>delete m_pBMI2;</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -