المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Saving DrawLine to Image



C# Programming
05-01-2013, 03:03 AM
Hi all,I'm creating an application that will allow me to draw lines with the mouse and then save them to a file in a graphical format. By dint of trying and trying I have come to the code. The last problem that I can not solve is that I can only save the 'background' of the image but not the drawed shape. The program consists of a PictureBox1 and a button1, drawing with the left mouse button, closes the shape with the right button and save the. Thanks in advance to those who want to give me a tip.
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Drawing.Imaging;using System.Drawing.Drawing2D; namespace WindowsFormsApplication1{ public partial class Form1 : Form { Bitmap bm; Graphics g; GraphicsPath path = new GraphicsPath(); Pen redPen; Pen blackPen1; Pen blackPen2; Pen orangePen; public Form1() { InitializeComponent(); g = pictureBox1.CreateGraphics(); redPen = new Pen(Color.Red, 2); blackPen1 = new Pen(Color.Black, 1); blackPen2 = new Pen(Color.Black, 2); orangePen = new Pen(Color.Orange, 1); bm = new Bitmap(pictureBox1.Width, pictureBox1.Height); } private void Form1_Load(object sender, EventArgs e) { pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint); pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown); Shown += Form1_Shown; } /////////////////////// private void Form1_Shown(Object sender, EventArgs e) { } private List<Point> polygonPoints = new List<Point>(); /////////////////////// private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { switch (e.Button) { case MouseButtons.Left: polygonPoints.Add(new Point(e.X, e.Y)); if (polygonPoints.Count > 1) { path.AddLine(polygonPoints[polygonPoints.Count - 2], polygonPoints[polygonPoints.Count - 1]); g.DrawPath(redPen, path); } break; case MouseButtons.Right: if (polygonPoints.Count > 2) { path.CloseAllFigures(); g.DrawPath(redPen, path); g.FillPath(new SolidBrush(Color.Orange), path); } break; } } private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = Graphics.FromImage(bm); // Draw grid for (int i = 0; i < pictureBox1.Width; i += 10) g.DrawLine(blackPen1, i, pictureBox1.Height, i, 0); for (int i = 0; i < pictureBox1.Height; i += 10) g.DrawLine(blackPen1, 0, i, pictureBox1.Width, i); g.DrawLine(blackPen2, 0, pictureBox1.Height - 90, pictureBox1.Width, pictureBox1.Height - 90); //g.Dispose(); e.Graphics.DrawImageUnscaled(bm, 0, 0); } private void button1_Click(object sender, EventArgs e) { bm.Save("c:\\test.png", ImageFormat.Png); } }}