我一直在试图改变我的照片的大小。我看了很多网站:1,2,3。Winforms清除位图图像?
最后一个链接(3)至少会调整图像的大小,除了旧图像保留在调整后的图像之外。这是怎么发生的?为什么?如果我将winform最小化,然后将winform备份起来,则旧图像消失了,剩下的只是调整后的版本。我如何摆脱旧的形象?
任何想法?
我一直在试图改变我的照片的大小。我看了很多网站:1,2,3。Winforms清除位图图像?
最后一个链接(3)至少会调整图像的大小,除了旧图像保留在调整后的图像之外。这是怎么发生的?为什么?如果我将winform最小化,然后将winform备份起来,则旧图像消失了,剩下的只是调整后的版本。我如何摆脱旧的形象?
任何想法?
从C# Tutorial - Image Editing: Saving, Cropping, and Resizing的第一个链接给你的代码。
有没有理由不使用它?
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;
}
不要忽视InterpolationMode
。它会使图像更好看。
此外,我不认为你想在这种情况下使用CreateGraphics()
。您可能想要使用实际位图来存储调整大小的图像,或者仅使用要显示图像的控件的绘制事件中的对象Graphic
。
我已经尝试将其添加到我的代码中,但它不会工作,我不得不确保StartPainting获取返回的图像(如果我这样做,它编译并运行没有错误,但图像不会更改大小?(不知道为什么)..... – BigBug
@BlueMonster你的原始图像是什么?它看起来像你试图从控件调整图像大小,而不是原始位图。 – LarsTech
我有一个图像使用OpenFileDialog ...我玩的位来改变它的颜色等我使用位图...玩颜色我必须锁定图像到内存然后我解锁使用“UnlockBits()”,似乎都是工作正常......它只是调整大小,我不知道如何去玩比赛来调整我的形象? – BigBug
是不是清除图形对象的曲面?也许是因为那个旧图像仍然可能已经显示。看看这里http://msdn.microsoft.com/en-us/library/system.drawing.graphics.clear.aspx
嗯,我试着在“e.Graphics.Clear(Color.White)”添加;“但未调整大小的图像仍然存在?有什么我可以用来清除该图像吗? – BigBug
你的调整大小的方法没有任何问题。 – doogle
*从不*使用CreateGraphics(),它不会正确地清除背景,并且您绘制的任何内容都将很容易消失。实施Paint事件,并使用传递的e.Graphics。您的Click事件应调用Invalidate()来触发绘画。 –
也许你可以发布代码示例,以便我们可以看到你在做什么。 –