2012-06-30 47 views
-1

在Form1的頂部我所做的:Bitmap bmp; Paint事件我畫的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文件圖紙內唯一。如果我正在做pictureBox1.Image.Save,它只會將保存在硬盤上的圖片文件放在圖片框中,而沒有繪圖。

我該如何組合它,所以我會做一個保存行/命令,它將創建一個與pictureBox圖像和圖紙在硬盤上的BMP文件?

Graphics gfx = Graphics.FromImage(pictureBox1.Image) 

然後通過使用GFX實例,例如畫上了圖片框的事情:

+0

您確實有寫入權限'd:\'? (它會碰巧是CD驅動器?) – Ryan

+0

minitech D:是我的第二個硬盤。 – user1477444

回答

0

當你想畫的東西到的圖像,使用靜態函數FromBitmap創建一個圖形元素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

確定添加\到此:String tempFile = @「d:\ PictureBoxToBitmap」like:String tempFile = @「d:\ PictureBoxToBitmap \」現在它保存的圖像/幀,因爲我想要但沒有我已添加/繪製的點在pictureBox上。我還需要保存所繪製的東西不僅pictureBox1.Image – user1477444

+0

進出口編輯我的問題到我到目前爲止。 – 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