我正在使用C#,我想在Form上绘制一些多边形,然后将图形保存在Bitmap中。
在this question个答案之后,我在Form类中编写了一个方法:
private void draw_pol()
{
Graphics d = this.CreateGraphics();
// drawing stuff
Bitmap bmp = new Bitmap(this.Width, this.Height, d);
bmp.Save("image.bmp");
}
通过这种方式,表单可以正确显示图形,并创建名为“image.bmp”的位图文件,但该文件是白色图像。
为什么bmp文件没有显示任何图像?我做错了什么?
非常感谢。
答案 0 :(得分:2)
传递给位图的图形参数仅用于指定位图的分辨率。它不会以任何方式绘制到位图。
来自MSDN:
此方法创建的新Bitmap分别从g的DpiX和DpiY属性获取其水平和垂直分辨率。
而是使用Graphics.FromImage()
来获取可以使用的Graphics
对象。此外,绘画后你应该Dispose
Graphics
个对象。这是using
语句的理想用法。
Bitmap bmp = new Bitmap(this.Width, this.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
//paint stuff
}
bmp.Save(yourFile);
如果您还需要将其绘制到表单中,您可以轻松地绘制您创建的位图:
Graphics g = this.CreateGraphics();
g.DrawImage(bmp, 0, 0);
答案 1 :(得分:2)
Graphics
个实例仅在一个Bitmap
上运行。它可以是您要保存的那个,也可以是表单上的那个。
例如,您可以执行此操作以在表单上呈现绘制的位图,然后将其保存:
private void DrawOnBitmap()
{
using (var bitmap = new Bitmap(this.Width, this.Height))
{
using (var bitmapGraphics = Graphics.FromImage(bitmap))
{
// Draw on the bitmap
var pen = new Pen(Color.Red);
var rect = new Rectangle(20, 20, 100, 100);
bitmapGraphics.DrawRectangle(pen, rect);
// Display the bitmap on the form
using (var formGraphics = this.CreateGraphics())
{
formGraphics.DrawImage(bitmap, new Point(0, 0));
}
// Save the bitmap
bitmap.Save("image.bmp");
}
}
}
答案 2 :(得分:1)
你需要一个代表位图的图形对象,这样你就可以在image.do上画画了这个:
将位图对象作为参数传递给图形对象
Bitmap bmp = new Bitmap(this.Width, this.Height, d);
bmp.Save("image.bmp");//for your need
Graphics d=Graphics.FromImage(bmp);