C# Winforms清除位图图像?

C# Winforms清除位图图像?,c#,.net,winforms,C#,.net,Winforms,我一直在尝试改变我照片的大小。我看过很多网站: 最后一个链接(3)将至少调整图像大小,但旧图像仍保留在已调整大小的图像后面。这是怎么发生的?为什么?如果我最小化winform,然后重新启动winform,旧映像将消失,剩下的只是调整大小的版本。我如何摆脱旧的形象 有什么想法吗?来自的第一个链接提供了代码 有没有理由不使用它 private static Image resizeImage(Image imgToResize, Size size) { int sourceWidth = i

我一直在尝试改变我照片的大小。我看过很多网站:

最后一个链接(3)将至少调整图像大小,但旧图像仍保留在已调整大小的图像后面。这是怎么发生的?为什么?如果我最小化winform,然后重新启动winform,旧映像将消失,剩下的只是调整大小的版本。我如何摆脱旧的形象

有什么想法吗?

来自的第一个链接提供了代码

有没有理由不使用它

private static Image resizeImage(Image imgToResize, Size size)
{
   int sourceWidth = imgToResize.Width;
   int sourceHeight = imgToResize.Height;

   float nPercent = 0;
   float nPercentW = 0;
   float nPercentH = 0;

   nPercentW = ((float)size.Width / (float)sourceWidth);
   nPercentH = ((float)size.Height / (float)sourceHeight);

   if (nPercentH < nPercentW)
      nPercent = nPercentH;
   else
      nPercent = nPercentW;

   int destWidth = (int)(sourceWidth * nPercent);
   int destHeight = (int)(sourceHeight * nPercent);

   Bitmap b = new Bitmap(destWidth, destHeight);
   Graphics g = Graphics.FromImage((Image)b);
   g.InterpolationMode = InterpolationMode.HighQualityBicubic;

   g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
   g.Dispose();

   return (Image)b;
}
private static Image resizeImage(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH
不要忽略
插值模式
。这将使图像更好看


另外,我认为您不希望在这种上下文中使用
CreateGraphics()。您可能希望使用实际位图来存储调整大小的图像,或者仅使用要在其中显示图像的控件的绘制事件中的
图形对象。

是否正在清除图形对象的表面?也许是因为那张老照片可能还在展示。看看这里

调整大小的方法没有问题。永远不要使用CreateGraphics(),它不会正确擦除背景,你画的任何东西都会很容易消失。改为实施绘制事件并使用传递的e.Graphics。您的单击事件应该调用Invalidate()来触发绘制。也许您可以发布一个代码示例,这样我们就可以看到您在做什么。@Hans Passant我希望您能够发布您的答案,而不是将其作为注释。你完全正确!!!我已经尝试将其添加到我的代码中,但它不起作用,我必须确保StartPainting获得返回图像(如果我这样做,它编译并运行时不会出错,但图像大小不会改变?(不确定原因)..…@BlueMonster您的原始图像是什么?看起来您正在尝试从控件调整图像大小,而不是原始位图。我使用OpenFileDialog加载了一个图像…我使用位来更改其颜色等。我使用位图…来玩颜色,我必须将图像锁定到内存中,然后使用“解锁位()"这一切似乎都很好…只是调整大小,我不知道如何开始玩位来调整我的图像大小?我将添加图像加载和更改图像颜色的示例到上面的代码中,以便您可以看到..@BlueMonster是的,只是有很多问题。您正在创建一个picturebox,但您没有使用我t、 它也不会被添加到任何表单中。你想在上面画什么?表单?图片盒?其他控件?嗯,我尝试添加“e.Graphics.Clear(Color.White);”但未调整大小的图像仍然保留在后面?我可以用什么来清除该图像吗?