原文见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);
}
}
}
相关文章: