使用windows的的自带的函数来显示图像可能始终还是绕不开两个概念,
视口和窗口。
视口--- 屏幕上的一个显示用的矩形框。
窗口--- 完整图像上的一个用于取数的矩形框。
屏幕的宽度、高度和视口参数用于控制向显示存储器中写数。
图像的宽度、高度和窗口参数用于控制从图像文件中取数。
利用DrawDibDraw函数可以实现视频显示和单帧图像的显示,而且对于显示图像的移动和放缩,也可以轻松实现。但是
在实际的显示中可能都会把屏幕的概念利用GetClientRect()换成客户区。因为图像总是在客户区进行显示。
为了让图像正常显示(即不经过缩放),那么窗口的大小必定和视口的大小是完全相同的,只是窗口的起始点和视口的起始点坐标标准是不一样的,所以这两点坐标显然是不一样的。
例如rc即为我们设的客户区的CRect类的对象,这里我们假设视口的大小等于客户区的大小。
DrawDibDraw(m_hDrawDib, m_hDC,
//视口
rc.left,//目的图像的横坐标在客户区的横坐标起始,视口的横坐标起始
rc.top,//目的图像的纵坐标在客户区的纵坐标起始,视口的纵坐标起始
rc.Width(),//目的图像的宽度,视口的图像宽度
rc.Height(),//目的图像的高度,视口的图像高度
&(m_pBmpInfo->bmiHeader),
m_pSourceDat,//整幅图像的数据起始首地址
//窗口
dxs,//源图像的横坐标起始,窗口横坐标起始
dys,//源图像的纵坐标起始,窗口纵坐标起始
rc.Width(),//源图像的宽度,窗口宽度
rc.Height(),//源图像的高度,窗口高度
0);这样就可以正常显示一副图像了,而且随着dxs和dys的改变,可以改变窗口取数的位置,从而显示的是移动后的图像。