C # - Comment changer la qualité PNG ou la profondeur de couleur

Je suis censé écrire un programme qui obtient quelques images PNG à partir de l'utilisateur, du fait des modifications simples comme la rotation et l'enregistre dans un fichier JAR, de sorte qu'il peut utiliser les images comme des ressources. Le problème est quand je l'ouvre, une 80 ko de l'image et de l'enregistrer avec le C#, j'obtiens une image avec la même qualité mais pour 130kb de l'espace. Et parce qu'il a d'aller à l'intérieur d'un J2ME jar fichier que j'ai vraiment besoin de plus faible taille, à moins de la taille d'origine. J'ai essayé le code ci-dessous mais plus tard découvert qu'il ne fonctionne que pour les images Jpeg.

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
                int j = 0;
                for (j = 0; j < codecs.Length; j++)
                {
                    if (codecs[j].MimeType == "image/png") break;
                }
                EncoderParameter ratio = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 10L);
                EncoderParameters CodecParams = new EncoderParameters(1);
                CodecParams.Param[0] = ratio;

                Image im;
                im = pictureBox1.Image;
                im.Save(address , codecs[j], CodecParams);

C'est là que l'image est chargée dans une zone de l'image:

private void pictureBox1_DoubleClick(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string address = openFileDialog1.FileName;
                address.Replace("\\", "\\\\");
                Image im = Image.FromFile(address);
                pictureBox1.Image = im;
            }
        }

Et c'est là que c'est d'être sauvé de retour avec aucune édition:

private void generateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {

                ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
                int j = 0;
                for (j = 0; j < codecs.Length; j++)
                {
                    if (codecs[j].MimeType == "image/png") break;
                }
                EncoderParameter ratio = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 10L);
                EncoderParameters CodecParams = new EncoderParameters(1);
                CodecParams.Param[0] = ratio;

                string address = folderBrowserDialog1.SelectedPath;
                address = address + "\\";
                address.Replace("\\", "\\\\");

                Image im;
                im = pictureBox1.Image;               
                im.Save(address + imageFileNames[1], codecs[j], CodecParams);

Remarque: imageFileNames[] est juste un tableau de chaînes qui possède certaines des noms de fichier de laquelle les images doivent être enregistrées.

Toutes les idées seront appréciées et merci d'avance.

source d'informationauteur Auxiliary