2012-12-14 105 views
0

我試圖保存我在程序中處理的圖像。例如在原始圖像中添加僞彩色數字圖像處理保存圖像

我嘗試了幾種方法,每次出現錯誤。

GDI +發生了一般性錯誤。

誰能告訴我如何正確實施保存方法嗎?

這裏是最新嘗試:

using System; 
using System.Collections.Generic; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.IO; 
using System.Text; 
using System.Windows.Forms; 

namespace IMGPROC 
{ 



    public partial class Form1 : Form 
    { 
     public Bitmap original_image, proc_image; 

     public Form1() 
     { 
      InitializeComponent(); 
      original_image = null; 
      proc_image = null; 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     public void Form1_Paint(object sender, PaintEventArgs e) 
     { 
      if (original_image != null) 
      { 
       Graphics g = e.Graphics; 
       Rectangle r = new Rectangle(10, 50, original_image.Width, original_image.Height); 
       g.DrawImage(original_image, r); 


      } 

     } 

     //    OPEN IMAGE FILE 
     /******************************************************************************************/ 

     private void openToolStripMenuItem_Click_1(object sender, EventArgs e) 
     { 
      // show the openFile dialog box    
      Graphics g = this.CreateGraphics(); 
      if (openFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       original_image = new Bitmap(openFileDialog1.FileName); 

      } 

      Rectangle r = new Rectangle(10, 50, original_image.Width, original_image.Height); 
      g.DrawImage(original_image, r); 
     } 

     //    SAVE IMAGE FILE 
     /******************************************************************************************/ 

     private void saveAsToolStripMenuItem_Click(object sender, System.EventArgs e) 
     { 
      SaveFileDialog save = new SaveFileDialog(); 
      save.Filter = "Bitmap Image (.bmp)|*.bmp|Gif Image (.gif)|*.gif |JPEG Image (.jpeg)|*.jpeg |Png Image (.png)|*.png |Tiff Image (.tiff)|*.tiff |Wmf Image (.wmf)|*.wmf |All files (*.*)|*.*"; 
      save.FilterIndex = 4; 
      save.InitialDirectory = "C:\\"; 
      save.RestoreDirectory = true; 

      if (save.ShowDialog() == DialogResult.OK) 
      { 
       proc_image.Save(save.InitialDirectory); 
      } 
     } 

     //     EXIT APPLICATION 
     /************************************************************************************/ 

     private void exitToolStripMenuItem_Click_1(object sender, EventArgs e) 
     { 
      Dispose(); 
      Application.Exit(); 
     } 

     private void btnRed_Click(object sender, System.EventArgs e) 
     { 


      Graphics g = this.CreateGraphics(); 

      int width = original_image.Width; 
      int height = original_image.Height; 

      Color pixel; 

      Rectangle r = new Rectangle(535, 50, original_image.Width, original_image.Height); 
      Rectangle r2 = new Rectangle(0, 0, original_image.Width, original_image.Height); 
      Rectangle r3 = new Rectangle(10, 50, original_image.Width, original_image.Height); 


      g.DrawImage(original_image, r3); 

      Bitmap proc_image = new Bitmap(width, height, PixelFormat.Format24bppRgb); 

      for (int y = 0; y < height; ++y) 
      { 
       for (int x = 0; x < width; ++x) 
       { 
        pixel = original_image.GetPixel(x, y); 
        proc_image.SetPixel(x, y, Color.FromArgb(pixel.R, 0, 0)); 
       } 
      } g.DrawImage(proc_image, r); 

     } 

     private void btnGreen_Click(object sender, System.EventArgs e) 
     { 

      Graphics g = this.CreateGraphics(); 

      int width = original_image.Width; 
      int height = original_image.Height; 

      Color pixel; 

      Rectangle r = new Rectangle(535, 50, original_image.Width, original_image.Height); 
      Rectangle r2 = new Rectangle(0, 0, original_image.Width, original_image.Height); 
      Rectangle r3 = new Rectangle(10, 50, original_image.Width, original_image.Height); 

      g.DrawImage(original_image, r3); 

      Bitmap bitmap_colour = new Bitmap(width, height, PixelFormat.Format24bppRgb); 

      for (int y = 0; y < height; ++y) 
      { 
       for (int x = 0; x < width; ++x) 
       { 

        pixel = original_image.GetPixel(x, y); 
        bitmap_colour.SetPixel(x, y, Color.FromArgb(0, pixel.G, 0)); 

       } 
      } g.DrawImage(bitmap_colour, r); 

     } 

     private void btnBlue_Click(object sender, System.EventArgs e) 
     { 

      Graphics g = this.CreateGraphics(); 

      int width = original_image.Width; 
      int height = original_image.Height; 

      Color pixel; 

      Rectangle r = new Rectangle(535, 50, original_image.Width, original_image.Height); 
      Rectangle r2 = new Rectangle(0, 0, original_image.Width, original_image.Height); 
      Rectangle r3 = new Rectangle(10, 50, original_image.Width, original_image.Height); 


      g.DrawImage(original_image, r3); 

      Bitmap bitmap_colour = new Bitmap(width, height, PixelFormat.Format24bppRgb); 

      for (int y = 0; y < height; ++y) 
      { 
       for (int x = 0; x < width; ++x) 
       { 
        pixel = original_image.GetPixel(x, y); 
        bitmap_colour.SetPixel(x, y, Color.FromArgb(0, 0, pixel.B)); 
       } 

      } g.DrawImage(bitmap_colour, r); 

     } 

     private void pseudocolorToolStripMenuItem_Click(object sender, System.EventArgs e) 
     { 
      checkImageOpen(); 

      btnRed.Visible = true; 
      btnGreen.Visible = true; 
      btnBlue.Visible = true; 

      Graphics g = this.CreateGraphics(); 

      int width = original_image.Width; 
      int height = original_image.Height; 


      Rectangle r = new Rectangle(535, 50, original_image.Width, original_image.Height); 
      Rectangle r2 = new Rectangle(0, 0, original_image.Width, original_image.Height); 
      Rectangle r3 = new Rectangle(10, 50, original_image.Width, original_image.Height); 


      g.DrawImage(original_image, r3); 

     } 

      } 

     } 
+0

問題是什麼?只需調用位圖。保存 –

+0

進行圖像處理時,最好不要使用getpixel/setpixel,因爲它們很慢。你可以使用鎖定位,它在像素級更快。檢查http://www.codeproject.com/Tips/240428/Work-with-bitmap-faster-with-Csharp – urlreader

+0

我在除了僞彩色之外的所有方法中都使用這種方法,我省略了其他方法以便於閱讀。 – user1221292

回答

1
if (save.ShowDialog() == DialogResult.OK) 
{ 
    proc_image.Save(save.FileName); 
} 

無法一些東西保存爲一個目錄,即使你可能在你不希望使用初始目錄..

+0

感謝您的回覆,我以前有類似的東西,你是正確的。我現在開始工作了,我必須先創建一個克隆,然後才能保存它。 – user1221292