【发布时间】:2017-11-11 00:29:59
【问题描述】:
我有一个分辨率为 6000x4000 的 PNG 图像,我必须在其上进行绘制。所以我将图像加载到大小为 1280x800 的图片框中。在绘制之后,我需要将 PNG 图像保存为原始分辨率 6000x4000。所以我使用
将它重新加载到大小为 6000x4000 的新位图中btm = new Bitmap(6000, 4000);
image = Graphics.FromImage(btm);
g.DrawImage(btm, Point.Empty);
并使用保存它
btm.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
现在我最终得到了分辨率为 6000x4000 的白色背景 png 图像,但上面有 1280x800 的编辑图像,就像这样Saved Image
如何将图像调整回其原始 (6000x4000) 大小。谢谢。
也请在下面找到我的代码
private void drawImage(string imgLocation)
{
Bitmap b = new Bitmap(imgLocation);
////test
pictureBox1.Height = 800;
pictureBox1.Width = 1280;
g = pictureBox1.CreateGraphics();
btm = new Bitmap(6000, 4000);
image = Graphics.FromImage(btm);
image.CompositingMode = CompositingMode.SourceCopy;
image.CompositingQuality = CompositingQuality.HighQuality;
image.InterpolationMode = InterpolationMode.HighQualityBicubic;
image.SmoothingMode = SmoothingMode.HighQuality;
image.PixelOffsetMode = PixelOffsetMode.HighQuality;
image.Clear(Color.White);
image.DrawImage(b, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
//image.DrawImage(btm, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
//g.DrawImage(btm, Point.Empty);
g.DrawImage(btm, new Rectangle(0, 0, 6000,4000) );
}
【问题讨论】:
-
这应该很简单。 DrawImage 有很多重载。其中一些允许指定目标大小。
-
谢谢,我会调查的。如果可能的话,你能给我一些例子来实现这一点吗?
-
1) 如果你打电话给
CreateGraphics(),那你就错了。 2) 要在绘图时缩放位图,只需为Graphics对象设置变换或使用DrawImage()重载,让您指定绘图的目标矩形。 3) 你发布的代码很奇怪,甚至超出了调用CreateGraphics();您将b绘制到btm中,然后您尝试将btm绘制回PictureBox控件上? 4) 如果您想要一个好的答案,您需要提供一个好的minimal reproducible example 以可靠地重现您的问题。 -
嗨,我这样做的原因是,在鼠标移动事件和图片框内,我有一个在图像上绘制的功能。根据您的建议,我将更新问题的代码部分,以使其更加清晰。
标签: c# winforms bitmap picturebox