2016-06-15 65 views
1

我使用此代碼加載圖像:如何將圖像保存爲C#中的8位?

OpenFileDialog ofd = new OpenFileDialog(); 
ofd.Title = "Select a Picture"; 
ofd.InitialDirectory = @"PATH"; 
if (ofd.ShowDialog() == DialogResult.OK) 
{ 
     HostImageLocationTxt.Text = ofd.FileName; 
     hostImage.Image = new Bitmap(ofd.FileName); 
} 

然後,我在另一個「PictureBox的」加載圖像,並使用此代碼保存圖像沒有任何修飾:

if (transformedImage.Image != null) 
      { 
       Bitmap bmp = new Bitmap(transformedImage.Image); 
       SaveFileDialog sfd = new SaveFileDialog(); 
       sfd.Title = "Select Save Location"; 
       sfd.InitialDirectory = @"PATH"; 
       sfd.AddExtension = true; 
       if (sfd.ShowDialog() == DialogResult.OK) 
       { 
        switch (Path.GetExtension(sfd.FileName).ToUpper()) 
        { 
         case ".BMP": 
          bmp.Save(sfd.FileName, ImageFormat.Bmp); 
          break; 
         case ".gif": 
          bmp.Save(sfd.FileName, ImageFormat.Gif); 
          break; 
         case ".JPG": 
          bmp.Save(sfd.FileName, ImageFormat.Jpeg); 
          break; 
         case ".JPEG": 
          bmp.Save(sfd.FileName,ImageFormat.Jpeg); 
          break; 
         case ".PNG": 
          bmp.Save(sfd.FileName, ImageFormat.Png); 
          break; 
         case ".png": 
          bmp.Save(sfd.FileName, ImageFormat.Png); 
          break; 
         default: 
          break; 
        } 
       } 
      } 

保存的圖像結果中不同的位深度(左:第一個加載圖像,右:已保存的圖像): Left: First Load Image , Right: Saved Image

如何使用它在第一個加載的相同格式進行保存?謝謝。

+0

您打電話給'ToUpper',但是您有兩種情況的標籤......?此外,你泄漏多個對象。你應該在'using'語句中包裝這些對象(OpenFIleDialog,Bitmap等)的創建。 –

+2

8bpp圖像的日期來自石器時代,當您必須在386SUX機器上以640 KB的RAM運行Windows時。這些天你的桌面背景圖像本身需要比整個Windows 3安裝更多的空間;)由於它們需要調色板,所以它們非常尷尬,System.Drawing支持它們的效果很差。大部分你對圖像做的任何事情,比如用Bitmap構造函數創建一個副本,都會使它變成現代的形狀。不要修復它,它不再是1990年。 –

回答

1

你應該使用這個構造:

Bitmap Constructor (Int32, Int32, PixelFormat)

public Bitmap(
    int width, 
    int height, 
    PixelFormat format 
) 

,並使用這個像素格式參數:System.Drawing.Imaging.PixelFormat.Format24bppRgb

編輯

您可以使用此轉換您圖片(https://stackoverflow.com/a/2016509/5703316):

Bitmap orig = new Bitmap(@"path"); 
Bitmap clone = new Bitmap(orig.Width, orig.Height, 
    System.Drawing.Imaging.PixelFormat.Format24bppRgb); 

using (Graphics gr = Graphics.FromImage(clone)) { 
    gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height)); 
} 
+0

那麼,我在開放圖像過程中編輯pixelformat? –

+0

你應該在保存之前轉換你的圖片 –

+0

好了謝謝你 –