您的位置:首页 > 其它

MFC图像处理-图像移动显示算法

2013-07-11 12:48 260 查看
在我之前的一篇文章中MFC图像处理-图像扫描显示之基本窗口已经介绍了我怎么创建基本的窗口,可以模仿着创建响应图像处理的基本操作按钮。
图像移动显示的方式有很多种,可以根据自己的需要设计自己的显示算法,这里就只列出常见的四种方式:向上,向下,向左,向右。移动显示的基本思路是:把图像看成一块木板画 ,显示时必须按物理顺序进行
, 例如从上向下平移时 ,必须先显示下面的图像 ,
后显示上面的图像。

一、 向上移动显示
// 向上移动显示图像,就是从下至上递增的显示图像的上部分,直至图像完全显示

for(int i = 0; i <= dibHeight; i++)

{

for(int j = 0; j <= dibWidth; j += 8) // 这个for语句是为了让移动显示图像时看起来更加平滑

{

// 利用StretchDIBits函数将图像块复制到显示设备的特定区域

::StretchDIBits(pDC->GetSafeHdc(), rect.left + (rect.Width() - dibWidth) / 2 + j,

rect.top + (rect.Height() - dibHeight) / 2 + dibHeight - i, 8, i,

j, dibHeight - i, 8, i, pDibData, pDibInfo,

DIB_RGB_COLORS, SRCCOPY);

}

}


二、 向下移动显示
// 向下移动显示图像,就是从上至下递增的显示图像的下部分,直至图像完全显示

for(int i = 0; i <= dibHeight; i++)

{

for(int j = 0; j <= dibWidth; j += 8) // 这个for语句是为了让移动显示图像时看起来更加平滑

{

// 利用StretchDIBits函数将图像块复制到显示设备的特定区域

::StretchDIBits(pDC->GetSafeHdc(), rect.left + (rect.Width() - dibWidth) / 2 + j,

rect.top + (rect.Height() - dibHeight) / 2, 8, i,

j, 0, 8, i, pDibData, pDibInfo,

DIB_RGB_COLORS, SRCCOPY);

}

}


三、 向左移动显示

// 向左移动显示图像,就是从右至左递增的显示图像的左部分,直至图像完全显示

for(int i = 0; i <= dibWidth; i++)

{

for(int j = 0; j <= dibHeight; j += 8) // 这个for语句是为了让移动显示图像时看起来更加平滑

{

// 利用StretchDIBits函数将图像块复制到显示设备的特定区域

::StretchDIBits(pDC->GetSafeHdc(), rect.left + (rect.Width() - dibWidth) / 2 + dibWidth - i,

rect.top + (rect.Height() - dibHeight) / 2 + j - 8, i + 1, 8,

0, dibHeight - j, i + 1, 8, pDibData, pDibInfo,

DIB_RGB_COLORS, SRCCOPY);

}

}


四、 向右移动显示

// 向右移动显示图像,就是从左至右递增的显示图像的右部分,直至图像完全显示

for(int i = 0; i <= dibWidth; i++)

{

for(int j = 0; j <= dibHeight; j += 8) // 这个for语句是为了让移动显示图像时看起来更加平滑

{

// 利用StretchDIBits函数将图像块复制到显示设备的特定区域

::StretchDIBits(pDC->GetSafeHdc(), rect.left + (rect.Width() - dibWidth) / 2,

rect.top + (rect.Height() - dibHeight) / 2 + j - 8, i + 1, 8,

dibWidth - i, dibHeight - j, i + 1, 8, pDibData, pDibInfo,

DIB_RGB_COLORS, SRCCOPY);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: