-1

在 Form1 的顶部,我做了:Bitmap bmp;在绘制事件中,我正在绘制文件pictureBoxbmp文件:

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    SolidBrush brush;
    Pen p = null;
    Point connectionPointStart;
    Point connectionPointEnd;
    Graphics g = e.Graphics;
    bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    Graphics bitmapGraphics = Graphics.FromImage(bmp);
    //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

    moveCounter++;
    label6.Text = moveCounter.ToString();

    brush = new SolidBrush(Color.Red);
    p = new Pen(brush);
    for (int idx = 0; idx < wireObject1._point_X.Count; ++idx)
    {
        Point dPoint = new Point((int)wireObject1._point_X[idx], (int)wireObject1._point_Y[idx]);
        dPoint.X = dPoint.X - 5; // was - 2
        dPoint.Y = dPoint.Y - 5; // was - 2
        Rectangle rect = new Rectangle(dPoint, new Size(10, 10));
        g.FillEllipse(brush, rect);
        bitmapGraphics.FillEllipse(brush, rect);

        // g.FillEllipse(brush, rect);
    }

    for (int i = 0; i < wireObject1._connectionstart.Count; i++)
    {
        int startIndex = wireObject1._connectionstart[i];
        int endIndex = wireObject1._connectionend[i];

        connectionPointStart = new Point((int)wireObject1._point_X[startIndex], (int)wireObject1._point_Y[startIndex]);
        connectionPointEnd = new Point((int)wireObject1._point_X[endIndex], (int)wireObject1._point_Y[endIndex]);
        p.Width = 2;
        g.DrawLine(p, connectionPointStart, connectionPointEnd);
        bitmapGraphics.DrawLine(p, connectionPointStart, connectionPointEnd);
    }
}

我在绘制事件中为 bmp 文件做了一个新实例。我还为 bmp 文件创建了一个新的图形变量。我在pictureBox中绘制或填充椭圆的每个地方我也将它绘制到bmp文件中。

现在在我做的保存功能中:

private void SavePictureBoxToBitmap()
{
    //PbToBitmap++;
    //String tempFile = @"d:\PictureBoxToBitmap\" + PbToBitmap.ToString("D6") + bmp;
    bmp.Save(@"d:\PictureBoxToBitmap\bit.bmp");
}

如果我在做 bmp.Save ,它会在硬盘上保存一个白色的 bmp 文件,里面只有图纸。如果我在做pictureBox1.Image.Save,它会在硬盘上保存一个文件,里面只有pictureBox中的图片,没有图纸。

我怎样才能将它结合起来,这样我就可以创建一个保存行/命令,它会在硬盘上创建一个带有pictureBox图像和图纸的bmp文件?

4

2 回答 2

0

当你想在 Image 上绘制一些东西时,使用静态函数 FromBitmap 创建一个 Graphics 元素:

Graphics gfx = Graphics.FromImage(pictureBox1.Image)

然后使用 gfx 实例在图片框上绘制东西,例如 gfx.DrawLine。

然后保存它,使用 pictureBox1.Image.Save 函数。

更新

你的代码对我来说有点太神秘了,但我做了一个简单的例子可以回答你的问题。我创建了一个newq空窗体,添加了一个图片框,然后实现了Paint功能。

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Graphics gfx = Graphics.FromImage(pictureBox1.Image);
        gfx.DrawLine(new Pen(Color.Red, 5), new Point(10, 10), new Point(20, 20));
        gfx.DrawLine(new Pen(Color.Red, 5), new Point(20, 10), new Point(10, 20));
        pictureBox1.Image.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
        pictureBox1.Refresh(); // The file will be correct without this, but the update will not be shown
    }
于 2012-06-30T22:03:11.097 回答
0
using (var bmp = new Bitmap(panel1.Width, panel1.Height))
{
pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
bmp.Save("output.png", System.Drawing.Imaging.ImageFormat.Jpeg);
}

应该管用

于 2016-10-25T19:51:28.347 回答