-1

Form1 の上部で私がやった:Bitmap bmp;ペイント イベントでpictureBox、ファイルとbmpファイルに描画しています:

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内の画像のみを含むファイルがハードディスクに保存されます。

1 つの保存行/コマンドを作成し、pictureBox イメージと図面を一緒に 1 つの bmp ファイルをハードディスク上に作成するようにするにはどうすればよいですか?

4

2 に答える 2

0

Image に何かを描画する場合は、静的関数 FromBitmap を使用して Graphics 要素を作成します。

Graphics gfx = Graphics.FromImage(pictureBox1.Image)

次に、gfx インスタンス (gfx.DrawLine など) を使用して画像ボックスに描画します。

それを保存するには、pictureBox1.Image.Save 関数を使用します。

アップデート

あなたのコードは私には少し難解ですが、あなたの質問に答える簡単な例を作成しました。newq 空のフォームを作成し、ピクチャ ボックスを追加してから、ペイント機能を実装しました。

    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 に答える