2011-09-23 41 views
6

Tôi đang lưu bằng cách chụp ảnh màn hình qua mã đó.Gửi ảnh chụp màn hình qua C#

Graphics Grf; 
Bitmap Ekran = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppPArgb); 
Grf = Graphics.FromImage(Ekran); 
Grf.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); 
Ekran.Save("screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 

Sau đó gửi ảnh chụp màn hình lưu này như e-mail:

SmtpClient client = new SmtpClient(); 
MailMessage msg = new MailMessage(); 
msg.To.Add(kime); 
if (dosya != null) 
{ 
    Attachment eklenecekdosya = new Attachment(dosya); 
    msg.Attachments.Add(eklenecekdosya); 
} 
msg.From = new MailAddress("[email protected]", "Konu"); 
msg.Subject = konu; 
msg.IsBodyHtml = true; 
msg.Body = mesaj; 
msg.BodyEncoding = System.Text.Encoding.GetEncoding(1254); 
NetworkCredential guvenlikKarti = new NetworkCredential("[email protected]", "*****"); 
client.Credentials = guvenlikKarti; 
client.Port = 587; 
client.Host = "smtp.live.com"; 
client.EnableSsl = true; 
client.Send(msg); 

Tôi muốn làm điều này: Làm thế nào tôi có thể gửi ảnh chụp màn hình trực tiếp như e-mail thông qua giao thức smtp mà không lưu?

Trả lời

7

Lưu bitmap vào luồng. Sau đó đính kèm Luồng vào thư của bạn. Ví dụ:

System.IO.Stream stream = new System.IO.MemoryStream(); 
Ekran.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); 
stream.Position = 0; 
// later: 
Attachment attach = new Attachment(stream, "MyImage.jpg"); 
+3

Hãy nhớ để bao quanh các cuộc gọi với một khối sử dụng để bạn không có rò rỉ bộ nhớ, hoặc gọi .Dispose() phương pháp để giải phóng ký ức. – Digicoder

+0

Xin lỗi, tôi đã chỉnh sửa câu trả lời của tôi và khi tôi đăng cuối cùng, tôi thấy bạn cũng vậy. Bạn có thích tôi để xóa của tôi? :) Dù sao, +1 cho bạn – Marco

+0

Có - Trình tăng tốc sẽ làm tăng điểm quan trọng. Mã ban đầu có thể được cải thiện bằng cách sử dụng "sử dụng" khối trên tất cả các đối tượng IDisposable. Tôi bỏ nó ra để đơn giản, và cũng bởi vì việc thiết lập đúng cách "sử dụng" khối sẽ yêu cầu sửa đổi tất cả các mã ban đầu. –

2

Sử dụng này:

using (MemoryStream ms = new MemoryStream()) 
{ 
    Ekran.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
    using (Attachment att = new Attachment(ms, "attach_name")) 
    { 
     .... 
     client.Send(msg); 
    } 
} 
+0

Đừng quên Tệp đính kèm cũng được dùng quá ... –

+0

@ James: vâng, bạn nói đúng :) – Marco

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