模拟PS蠕动选区的实现

模拟PS蠕动选区的实现

http://blog.csdn.net/laviewpbt/article/details/1712072

       PS的蠕动选区的确为该软件增添了不少光彩,动态的显示不仅能告诉用户选择了哪些像素,还比我们日常在VB中使用Shape控件模拟选区要来的醒目。如果在我们自己的程序中添加这种功能,不是很值得欣慰的一件事嘛。下面就简单的讲述一下如何借助API函数实现这种效果。

       要模拟人家的效果,首先当然得仔细地观察PS中选区的规律,我们发现,PS的蠕动曲线如同从左上角出发,然后消失于右下角,并且线条是黑白相间的,长度分别为4像素,简单的实现这种黑白相间的边框线,似乎也不是什么难题,Windows中为我们提供了刷子的概念,只要选择恰当的刷子,然或绘制出边框就可以了,至于蠕动,则可以利用定时器,但是我们必须在每次的绘制过程中更换刷子,使得从视觉效果上有着蠕动效果。

       下面是总结出来实现蠕动的部分刷子位图(前三副,共有8副,放大显示了)

                                                               

     由于这些刷子都是有黑白了两色组成的,因此可以由函数CreateBitmap创建出,然后调用CreatePatternBrush创建出刷子,也可以先由PS绘制出这些大小的刷子,当然,后者的发挥余地可能更大,比如我不想采用黑白相间的,采用自己做的一些小图案也可以。

      因为我们只需要描绘出选区的边框,因此在调用函数FrameRgn时指定其最后两个参数为1,1。

      当需要描绘非矩形区域时,可以CreateEllipticRgn、CreatePolygonRgn、CreateRoundRectRgn之类的函数先创建复杂的区域,在显示之。

      附:主要用到的API函数:

CreatePatternBrush
CreateBitmap
DeleteObject
SelectObject
SetBkColor
CreateRectRgn
CreateEllipticRgn
CreatePolygonRgn
CreateRoundRectRgn
FrameRgn

 效果:



猜你喜欢

转载自blog.csdn.net/lihongmao5911/article/details/44031589