2012-07-09 45 views
10

tôi muốn vẽ một đường trên một hình ảnh bmp đó là vượt qua thành một phương pháp sử dụng DrawLine phương pháp trong C#làm cách nào để vẽ một đường trên hình ảnh?

public void DrawLineInt(Bitmap bmp) 
{ 

Pen blackPen = new Pen(Color.Black, 3); 

int x1 = 100; 
int y1 = 100; 
int x2 = 500; 
int y2 = 100; 
// Draw line to screen. 
e.Graphics.DrawLine(blackPen, x1, y1, x2, y2); 
} 

này cung cấp cho một error.So tôi muốn biết làm thế nào để bao gồm sơn sự kiện ở đây (PaintEventArgs e)

và cũng muốn biết cách chuyển các tham số khi chúng tôi gọi drawmethod? dụ

DrawLineInt(Bitmap bmp); 

này cung cấp cho các lỗi sau "Cái tên 'e' không tồn tại trong bối cảnh hiện nay"

+1

"lỗi này". Lỗi gì? – Oded

Trả lời

16

"Vẽ một đường trên hình ảnh bmp được chuyển vào phương thức sử dụng phương pháp đường biên trong C#"

PaintEventArgs e sẽ gợi ý rằng bạn đang làm điều này trong sự kiện "sơn" cho một đối tượng. Vì bạn đang gọi nó trong một phương thức, sau đó không bạn không cần phải thêm PaintEventArgs e vào bất cứ đâu.

Để thực hiện việc này theo phương pháp, hãy sử dụng câu trả lời của @ BFree.

public void DrawLineInt(Bitmap bmp) 
{ 
    Pen blackPen = new Pen(Color.Black, 3); 

    int x1 = 100; 
    int y1 = 100; 
    int x2 = 500; 
    int y2 = 100; 
    // Draw line to screen. 
    using(var graphics = Graphics.FromImage(bmp)) 
    { 
     graphics.DrawLine(blackPen, x1, y1, x2, y2); 
    } 
} 

Sự kiện "Sơn" được nâng lên khi đối tượng được vẽ lại. Để biết thêm thông tin, hãy xem:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.paint.aspx

+2

Bạn cũng nên vứt bỏ bút khi đã xong. Hoặc đặt nó bên trong một khối 'sử dụng (var blackPen = new Pen (Color.Black, 3))'. –

5

Bạn cần phải nhận được đối tượng Graphics từ Image như vậy:

using(var graphics = Graphics.FromImage(bmp)) 
{ 
    graphics.DrawLine(...) 
} 
+0

tôi có cần thêm PaintEventArgs e vào bất kỳ đâu trong mã không? – user1150071

+0

@ user1150071 "tôi có cần thêm PaintEventArgs e vào bất kỳ đâu trong mã không?" câu trả lời ngắn gọn, không. Câu trả lời dài, xem bài đăng của tôi dưới đây. – Tom

Các vấn đề liên quan