蠕动效果在也不占用什么CPU了。

解决方案 »

  1.   

    http://p.blog.csdn.net/images/p_blog_csdn_net/laviewpbt/EntryImages/20080731/321312312313.JPG
      

  2.   

    希望楼主的China PhotoShop早日完工,楼主一个人搞定这么复杂的东东,不简单啊!
      

  3.   

    对PHOTOSHOP不太熟悉 能用好photoshop的是高手 恭喜楼主了
      

  4.   

    稍微谈一下实现魔术棒的大体思路吧。魔术棒主要包括两项任务,一是蠕动选区的实现,二是如何确定选区的范围。仔细观察photoshop中的选区,可以发现她有几个合并方式:1、新建 2相加 3 相减 4相交 ,而windows中与这个结构相类似的就有一个Region对象,因此,选用Region对象作为选区实现的基体应该是个好方法。为了达到蠕动效果,我们可以预先创建好一些纹理刷子,这个可以用CreatePatternBrush函数实现,这个函数不是有一个hBitmap参数吗。用一个Timer控件实现轮回改变刷子,SelectObject。至于显示,我也走了不少弯路,很自然的我们会想到FrameRgn,不错,这个函数在简单的选区时表现了较好的性能,但是当构成RGN的数据结构复杂,
      

  5.   

    FrameRgn的性能则大大的下降,会导致CPU的使用率长期在100%左右,并且由于是调用API函数导致的100%,在任务管理器里也很难强制结束。因此,该函数不适合于使用在此处,为了解决这个问题,可谓是一直放在那里有1年多啊,直到前不久看到网上有人写得自己提取选区边缘的代码,并偶然用FillRgn代替了FrameRgn,蠕动的速度立即得到了解决。2.选区的范围的确定:对于不连续的,也就是全局范围的魔术棒,可以借用于网络上流传的制作图形窗体的代码,但是制作图形窗体的图片一般都有一个特征,就是图像除了两端和我们设置的maskcolor一致外,中间的区域都是我们窗体要显示的地方,但是对于任意图像,显然不具有这一特征,因此,在直接借用网络流传代码时,发现的主要问题就是速度慢,究其原因,是代码中的不断的CreateRectRgn和CombineRgn所导致,解决方法就是先扫描一行,得到选区的矩形数组结构,并借助于相关API函数一次性创建区域。这样大大的提高了速度。    对于连续的,正如大家所想的,可以借助于数字图像学中的种子填充等算法实现,这里经过探索,发现用递归实现完全不现实,因为大量的递归会导致堆栈溢出,因此要找到用非递归的方法实现种子填充,这方面的资料网络上有一些VC的代码,我也是按照那些代码坐相应的改动而实现的。
      

  6.   

    不错~~虽然我对GUI相关编程不在行,也不知道这个东西的技术难度,但是想来应该是非常“变态”的了,希望楼主早日完成china photoshop
      

  7.   

    单就抠图而言,photoshop自带的魔术棒其实效果并不怎样,但另有一间公司出了个抠图的插件Mask Pro就强多了,现在不知出到什么版本,楼主有兴趣可以找找,试试是否可以在你的软件里增加类似的功能
    支持楼主
      

  8.   

    非常的不错,隆重地支持你!
    不过,我觉得你应该用C++,也许对你来说要容易些!VB做这些是很难的!
      

  9.   

    东方之珠  我严重的不他同意你的说法, 反倒是队我来说用C++难些。  VB照样速度快。
      

  10.   

    厉害....一段时间不见,又有突破了.....刚回到老窝,上网不方便,在整网线中.
    那就是说我能拿多点分了?HOHOHOHO~~~
      

  11.   

    China PhotoShop?
    楼主使用PhotoShop?还是开发类似软件?
    开发的话,真的很强。