xingd.net

.net related techonology

导航

GDI+中RenderingOrigin对TextureBrush的影响

Posted on 2005-02-02 15:40  xingd  阅读(1963)  评论(4)    收藏  举报
  原文见http://www.cnblogs.com/mikespook/archive/2005/01/31/99912.html,作者将图像对齐的问题归到对FillRectangle的理解上,这是不准确的。
  
  根本的原因在于TextureBrush的使用方式,GDI+中使用Brush时,会根据Graphics.RenderingOrigin确定Brush的原点,然后在FillRectangle,DrawString等使用Brush的方法中,将Brush的可见部分绘制出来。除了TextureBrush外,HatchBrush也会受RenderOrigin的影响。

  要实现原文中需要的功能,应该采用如下的代码:
private void DrawTitle_Right(Graphics g) 
{ 
    
using(Image img = Files.GetImage("/Images/Top_Right.gif"))
    
{
        
using (Brush brush = new TextureBrush(img))
        
{
            Point pt 
= g.RenderingOrigin;
            g.RenderingOrigin 
= new Point(this.ClientSize.Width-img.Width, 0);
            g.FillRectangle(brush, 
this.ClientSize.Width-img.Width, 0, img.Width, img.Height);
            g.RenderingOrigin 
= pt;
        }

    }

}

或者是:
private void DrawTitle_Right(Graphics g) 
{ 
    
using(Image img = Files.GetImage("/Images/Top_Right.gif"))
    
{
        
using (Brush brush = new TextureBrush(img))
        
{
            GraphicsState state 
= g.Save();
            g.RenderingOrigin 
= new Point(this.ClientSize.Width-img.Width, 0);
            g.FillRectangle(brush, 
this.ClientSize.Width-img.Width, 0, img.Width, img.Height);
            g.Restore(state);
        }

    }

}