关于GDI+的复式抛光技术

Double Buffering With GDI+

http://www.codeproject.com/KB/GDI-plus/gdiplus.aspx

GDIPlus

绪论

这是一个简单的关于GDI+的例子,我在我的第一个GDI+工程中使用过。本文关注复式抛光。首先你应当为你的工程添加GDI+支持,具体你可以参考Christian Graus的《Starting with GDI+》。
例子的主体部分是OnPaint函数,你可以在这个函数中看到一切:图像、字体、画刷等等。这些都比较清晰明了,所以我不加以讨论。我仅仅在这说明“复式抛光”。

正如你所知,你可以在视窗上画图,还可以从TextureBrush创建一个画刷或者画笔然后画各种图形或者线条。你甚至可以用TextureBrush支持的图像来写字。(你可以参考本文的例子或者Christian Graus的文章)

我认为复式抛光是图像中最重要的应用技术之一。在我们想创建图像的时候,这项技术还有很多应用细节,并且现在是快速计算机画图的时代。在这个解决方案中,在画图的时候你可以看到图像在屏幕上爬行。例如我们在地图应用软件或者CAD/CAM应用软件中都将会遇到这个问题。而使用这项技术,我们首先画图像然后再把图像画到视窗中,以此代替直接在屏幕上画图。以下是我的复式抛光例子:

   srand( (unsigned)time( NULL ) );

   int number = rand();

   number /= RAND_MAX + 1;

   number *= 254;

 

   Rect rc(rect.left,rect.top,rect.right,rect.bottom);

      Bitmap bmp(rect.right,rect.bottom);

 

   // Create a Graphics object that is associated with the image.

   Graphics* graph = Graphics::FromImage(&bmp);

 

   for(int x=0;x<rect.right;x++)

   {

         for(int y=0; y<rect.bottom; y++)

         {

                  double number = rand();

                  number /= RAND_MAX + 1;

                 number *= 254;

                 Pen pen(Color(number,number,number,number));

                 graph->DrawLine(&pen,0,0,x,y);

          }

         }

   // Draw the altered image.

   graphics.DrawImage(&bmp,rect.left,rect.top,rect.right,rect.bottom);

这在我电脑(AMD1.33G,内存256M)的屏幕上画图花费了36秒,但是应用复式抛光技术只用了5秒钟。你知道的,当你的窗口需要重绘的时候你每次都得等上36秒,这是多么无聊的。

最后,我想感谢Christian Graus的支持和文章,我使用了一些他写的关于GD+文章中的代码和思想。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值