如何将control.graphics绘制到位图

时间:2014-02-02 09:45:27

标签: c# system.drawing

我将图像绘制到我的pictureBox中:

pictureBox1.CreateGraphics().DrawImage(myImage, 0, 0);

我绘制了一些矩形:

pictureBox1.CreateGraphics().FillRectangle(Brushes.White, new Rectangle(point1, new Size(10, 10)));

但是我使用pictureBox1.DrawToBitmap(myBitmap,rect)来保存带有矩形的图像, 它只保存pictureBox控件而不用图形和矩形。 如何将图形内容保存到位图? 有我的代码:

//to get an image to pictureBox
private void btnOpen_Click(object sender, EventArgs e)
{
   OpenFileDialog ofd = new OpenFileDialog();
   if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
   {
       Bitmap img = (Bitmap)Image.FromFile(ofd.FileName);
       pictureBox1.CreateGraphics().DrawImage(img, new Point(0, 0));  
   }
}

//this is to draw rectangles
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    pictureBox1.CreateGraphics().FillRectangle(Brushes.White, new Rectangle(e.Location, new Size(10, 10)));
}

//tis is to save graphics to image
private void btnSave_Click(object sender, EventArgs e)
{
   pictureBox1.DrawToBitmap(myBitmap,rect)
   myBitmap.Save("C:\\test.bmp");
}

1 个答案:

答案 0 :(得分:0)

你可以这样做:

Bitmap bmp = new Bitmap(256, 256, gfx);
// now you can save bmp to file on disk

并将其加载回内存:

// here you must load file from disk into bmp
Graphics gfx = Graphics.FromImage(bmp);

虽然bmp是实际Bitmap,但我建议将其保存为比BMP更好的格式。 内存中的位图必须完全栅格化(原始格式的所有像素),以便您可以操作和渲染它们。但是在磁盘上你不需要这种方式的光栅,并且想节省空间,所以通常使用像PNG这样的格式。对于这个特殊情况,我不推荐JPG,这对图片来说非常好。你需要的是像我前面所说的那样PNG的无损编码。