原文见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的影响。

  要实现原文中需要的功能,应该采用如下的代码:
GDI+中RenderingOrigin对TextureBrush的影响private void DrawTitle_Right(Graphics g) 

GDI+中RenderingOrigin对TextureBrush的影响    
using(Image img = Files.GetImage("/Images/Top_Right.gif"))
{
GDI+中RenderingOrigin对TextureBrush的影响        
using (Brush brush = new TextureBrush(img))
{
GDI+中RenderingOrigin对TextureBrush的影响            Point pt 
= g.RenderingOrigin;
GDI+中RenderingOrigin对TextureBrush的影响            g.RenderingOrigin 
= new Point(this.ClientSize.Width-img.Width, 0);
GDI+中RenderingOrigin对TextureBrush的影响            g.FillRectangle(brush, 
this.ClientSize.Width-img.Width, 0, img.Width, img.Height);
GDI+中RenderingOrigin对TextureBrush的影响            g.RenderingOrigin 
= pt;
GDI+中RenderingOrigin对TextureBrush的影响        }

GDI+中RenderingOrigin对TextureBrush的影响    }

GDI+中RenderingOrigin对TextureBrush的影响}

或者是:
GDI+中RenderingOrigin对TextureBrush的影响private void DrawTitle_Right(Graphics g) 

GDI+中RenderingOrigin对TextureBrush的影响    
using(Image img = Files.GetImage("/Images/Top_Right.gif"))
{
GDI+中RenderingOrigin对TextureBrush的影响        
using (Brush brush = new TextureBrush(img))
{
GDI+中RenderingOrigin对TextureBrush的影响            GraphicsState state 
= g.Save();
GDI+中RenderingOrigin对TextureBrush的影响            g.RenderingOrigin 
= new Point(this.ClientSize.Width-img.Width, 0);
GDI+中RenderingOrigin对TextureBrush的影响            g.FillRectangle(brush, 
this.ClientSize.Width-img.Width, 0, img.Width, img.Height);
GDI+中RenderingOrigin对TextureBrush的影响            g.Restore(state);
GDI+中RenderingOrigin对TextureBrush的影响        }

GDI+中RenderingOrigin对TextureBrush的影响    }

GDI+中RenderingOrigin对TextureBrush的影响}
 

相关文章: