System.Drawing.Graphics.DrawImage()中的不需要的行为

时间:2013-11-01 15:04:10

标签: .net visual-studio-2010 graphics gdi+ drawimage

是否有人使用以下System.Drawing.Graphics方法重载遇到类似问题?

public void DrawImage(Image image,
                      Rectangle destRect,
                      Rectangle srcRect,
                      GraphicsUnit srcUnit)

使用以下方法创建Visual Studio控制台应用程序:

using (var g = Graphics.FromImage(image)) {
    g.DrawImage(image,
                new Rectangle(new Point(50, 50), new Size(20, 20)),
                new Rectangle(new Point(0, 0), new Size(20, 20)), 
                GraphicsUnit.Pixel);
}

.NET framework version:v4.0.30319

原始图片:

enter image description here

控制台应用已在不同的计算机上运行,​​产生了不同的结果:

第一台计算机上的通缉结果(Windows server 2008 SP1):

enter image description here

第二台计算机上的不需要的结果(Windows Server 2008 SP2):

enter image description here

1 个答案:

答案 0 :(得分:3)

您的调用行为未定义,因为源位图和目标位图是相同的。它将依赖于图形驱动程序。这就好像您在源缓冲区和目标缓冲区相同时尝试使用memcpy而不是memmove。