2012-01-18 39 views
21

hiện tại tôi có mã nàyGhi đè ảnh

private void saveImage() 
    { 
     Bitmap bmp1 = new Bitmap(pictureBox.Image); 
     bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
     // Dispose of the image files. 
     bmp1.Dispose(); 
    } 

tôi đã có một hình ảnh t.jpg tại ổ đĩa của tôi "c: \".
tôi muốn thay thế bằng hình ảnh mới mỗi khi chương trình của tôi chạy. nhưng lỗi GDI + hiển thị
làm cách nào để khắc phục sự cố?

+0

có thể sao chép của http://stackoverflow.com/questions/1036115/c-sharp-gdi-overwriting-an-image-using-save-method-of-bitmap –

+0

http://stackoverflow.com/questions/ 838063/overwriting-an-image-file-bitmap –

Trả lời

30

Bạn phải xóa hình ảnh của mình nếu hình ảnh đó đã tồn tại.

private void saveImage() 
    { 
     Bitmap bmp1 = new Bitmap(pictureBox.Image); 

     if(System.IO.File.Exists("c:\\t.jpg")) 
       System.IO.File.Delete("c:\\t.jpg"); 

     bmp1.Save("c:\\t.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
     // Dispose of the image files. 
     bmp1.Dispose(); 
    } 
+0

điều này sẽ khắc phục sự cố của tôi nhưng lỗi mới xuất hiện tại 'System.IO.File.Delete'. nó nói, * quá trình không thể truy cập tệp vì nó đang được sử dụng bởi một tiến trình khác * –

+0

Bạn có bất kỳ phần nào khác của mã đang làm việc với tệp đó không? –

+0

cái này 'img1 = new Bitmap (@" c: \\ t.jpg ", true);'. điều này chạy từ khi bắt đầu chương trình –

0
private void saveImage(Image file, string filename){ 
    try 
    {  
     if(Directory.Exists("filepath"+filename)) 
     { 
      file.Dispose(); 
     } 
     else 
     { 
      Directory.CreateDirectory("filepath"+filename); 
      file.Save("filepath" + filename, Imageformat.Jpeg); 
     } 
    } 
    finally 
    { 
     file.Dispose(); 
    }   
} 

một này làm việc cho tôi.

+1

Điều này không thay thế tệp hiện có! Ngoài ra, nó kiểm tra/tạo thư mục thay vì các tập tin và kết hợp đường dẫn nên được thực hiện bằng cách sử dụng 'Path.Combine' ... – Ronald