Utrata jakości obrazu w c # przy użyciu klasy obrazu (zmniejsza ilość kolorów)

Mam program c #, który otwiera obraz .tif, a później oferuje opcję zapisania go. Jednak podczas zapisywania obrazu zawsze występuje spadek jakości.

(EDYCJA: Podałem kilka parametrów podczas zapisywania obrazu, tak aby jakość wynosiła 100% i nie ma kompresji, ale liczba rzeczywistych unikalnych kolorów wynosi od 254 do 16, nawet jeśli właściwości obrazu pokazują 8bpp)

(EDIT2: Obraz, o którym mowa, jest obrazem w skali szarości z 8 bitami na piksel - 256 kolorów / odcieni szarości - nie dzieje się tak w przypadku obrazu barwnego 24 bity na piksel, który testowałem, gdy wszystkie kolory zostały zachowane. sądzić, że klasa obrazu może obsługiwać tylko 16 odcieni szarości)

Jak tego uniknąć?

Oto kod do otwierania obrazu:

public Image imageImport()
{
    Stream myStream = null;
    OpenFileDialog openTifDialog = new OpenFileDialog();
    openTifDialog.Title = "Open Desired Image";
    openTifDialog.InitialDirectory = @"c:\";
    openTifDialog.Filter = "Tiff only (*.tif)|*.tif";
    openTifDialog.FilterIndex = 1;
    openTifDialog.RestoreDirectory = true;
    if (openTifDialog.ShowDialog() == DialogResult.OK)
    {   
        try
        {
            if ((myStream = openTifDialog.OpenFile()) != null)
            {
                using (myStream)
                {
                    String tifFileName= openTifDialog.FileName;
                    imgLocation = tifFileName;
                    Bitmap tifFile = new Bitmap(tifFileName);
                    return tifFile;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
        }
    }
    return null;
}

W ten sposób zapisuję obraz:

private void saveImage(Image img)
{
    SaveFileDialog sf = new SaveFileDialog();
    sf.Title = "Select File Location";
    sf.Filter = " bmp (*.bmp)|*.bmp|jpeg (*.jpg)|*.jpg|tiff (*.tif)|*.tif";
    sf.FilterIndex = 4;
    sf.RestoreDirectory = true;
    sf.ShowDialog();

    // If the file name is not an empty string open it for saving.
    if (sf.FileName != "")
    {
        // Saves the Image via a FileStream created by the OpenFile method.
        System.IO.FileStream fs =
           (System.IO.FileStream)sf.OpenFile();

        // Saves the Image in the appropriate ImageFormat based upon the
        // File type selected in the dialog box.
        // NOTE that the FilterIndex property is one-based.
        switch (sf.FilterIndex)
        {
           case 1:
               img.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Bmp);
           break;

           case 2:
               img.Save(fs,
                   System.Drawing.Imaging.ImageFormat.Jpeg);
           break;

           case 3://EDITED -STILL DOES NOT RESOLVE THE ISSUE
               ImageCodecInfo codecInfo = ImageClass.GetEncoderInfo(ImageFormat.Tiff);
               EncoderParameters parameters = new EncoderParameters(2);
               parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,100L);
               parameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionNone);
               img.Save(fs,codecInfo, parameters);
           break;
       }
       fs.Close();
    }
}

Nawet jeśli nie zmieniam rozmiaru ani nie zmieniam obrazu w żaden sposób, tracę jakość. jakakolwiek rada?

questionAnswers(4)

yourAnswerToTheQuestion