2012-06-30 2 views
-1

В верхней части Form1 я сделал: Bitmap bmp; В случае краски я рисую на pictureBox, а также в файл bmp:Как сохранить текущий кадр/изображение в pictureBox1 в растровый файл?

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 файл с рисунками внутри только. Если im делает pictureBox1.Image.Save, он сохранит на жесткий диск файл с изображением в pictureBox только без рисунков.

Как я могу объединить его, чтобы я создал одну строку сохранения/команду, и она создаст один файл bmp на жестком диске с изображением pictureBox и рисунками вместе?

+0

Вы уверены, что у вас есть права на запись в 'D: \'? (Может быть, это CD-привод?) – Ryan

+0

minitech D: мой второй жесткий диск. – user1477444

ответ

0

Если вы хотите, чтобы нарисовать что-нибудь на изображение, создать графический элемент, используя статическую функцию FromBitmap:

Graphics gfx = Graphics.FromImage(pictureBox1.Image) 

Тогда вы рисуете вещи на поле изображения, используя экземпляр GFX, например, gfx.DrawLine.

Затем, чтобы сохранить его, используйте функцию pictureBox1.Image.Save.

UPDATE

Ваш код немного слишком загадочный для меня, но я сделал простой пример, который мог бы ответить на ваш вопрос. Я создал пустую форму 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 
    } 
+0

Ok добавляет \ к этому: String tempFile = @ "d: \ PictureBoxToBitmap" как: String tempFile = @ "d: \ PictureBoxToBitmap \" теперь сохраняет изображения/кадры, как я хотел, но без точек, которые я добавил/на картинке. Мне нужно также сохранить вещи, которые вырисовываются не только pictureBox1.Image – user1477444

+0

Im редактируя мой вопрос, где я до сих пор. – user1477444

+0

Сделал пример, как вы можете видеть в сообщении выше. Надеюсь, это немного поправит вас. –

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); 
} 

Должно работать

+0

Пожалуйста, попробуйте уточнить ответы только на код. Объясните, почему ваш ответ лучше других, или то, что он предлагает, отличается от других. Также имейте в виду, что этот вопрос старше 4 лет. – dcsohl

+0

Это очень старый вопрос, я только что заметил;/Но я все еще популярен, и я поделился своим решением для этого. – pineapple500

Смежные вопросы