首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

用vc实现简单的图像处理,该如何解决

2012-04-16 
用vc实现简单的图像处理RT:要用vc做一个带界面的图像处理软件,完成的工作十分简单,打开图片、平移、放大、调

用vc实现简单的图像处理
RT:
  要用vc做一个带界面的图像处理软件,完成的工作十分简单,打开图片、平移、放大、调节亮度即可
  小菜鸟一只,想法是用二维数组表示图片(只有灰度图,不考虑彩色),然后对数组进行处理~
  不知可行否,请大神赐教~~~另外如果可行,怎么将bmp格式的图像信息导入二维数组呢?

[解决办法]
推荐MFC做界面
-----------------------------------------------
一个图像处理程序很重要的一部分是写一个自己定制的DIB类,DIB意思你自己百度下,我不多说,
网上有许多优秀的DIB类供下载,不过如果图像处理自己定制的话,还是自己写这个类比较好。
------------------------------------------------
1.加载图片,用CImage或者用其他方法加载
2.从图片中提取图像数据到Byte* buf中
3.各种图像处理,灰度,二值化,对比度,亮度调节(具体算法,百度,这里不多说)
------------------------------------------------
平移图像、放大图像 需要你自己学习“双缓存”的原理,否则是做不出来的。大概就是,两张画布,一张是
图像画布,另一张是UI画布,图像画布就是你绘制经过处理的图像数据(灰度、二值化),利用BitBlt函数。
在UI画布上你可以缩放图像画布或者平移,具体的操作就是调节Bitblt函数的参数,里面有x,y坐标以及
要绘制到的画布大小。
绘制操作是在OnDraw(CDC* pDC)中进行调用的,更具情况不同还可能使用OnPaint(CDC* pDC)
[解决办法]
双缓存就是一种改进后的重绘。如果使用原始的计算后直接重绘UI或者边计算边重绘UI,会给用户非常不友好的显示效果。
------------------------------------------------------------
三缓存-----》》你可以在这里用一下,效果非常好,比双缓存能完成更加复杂的效果。
-----------------------------------------------------------

1.为了实现三缓存这种效果,我们可以创建一张画布A,这张画布是给用户UI最终显示的画布,大小一般和绘图区域大小一致。它只有在用户调用Invalidate或者其他刷新界面的函数时才会被绘制到UI上面。

2.我们还使用了另外一张画布B,这张画布使我们边计算边绘制的(这种计算一般会利用像素或者改变像素)。

3.当我们绘制完B这张画布后,我们不会一下子通过BitBlt函数把B绘制到A上面,而是通过bitblt函数把B绘制到和画布A相同大小的另一张画布C上面,在把B绘制到C的同时进行缩放、移动、剪切等操作(这些操作一般和像素操作无关)。

4.然后我们通过bitblt函数把C画布绘制到A上面,这时候界面刷不刷新与画布C无关,界面刷新只会调用A画布。

5.最后当我们刷新界面(refresh或者invalidate)时候,我们才在OnDraw中通过bitblt把A画布绘制到UI上面。
-----------------------------------------------------
这就是三缓存的原理,你自己先看看能看懂不,原理不复杂,就是功能的需求

热点排行