Como alterar a qualidade PNG ou a profundidade de cor

Eu devo escrever um programa que obtenha algumas imagens PNG do usuário, faça algumas edições simples como a rotação e as salve dentro de um arquivo JAR para que ele possa usar as imagens como recursos. O problema é que, quando abro, digito uma imagem de 80kb e, em seguida, salvo com C #, obtém uma imagem com a mesma qualidade, mas com espaço para 130kb. E como ele precisa estar dentro de um arquivo jar J2ME, eu realmente preciso de tamanhos menores, pelo menos o tamanho original. Eu tentei o código abaixo, mas depois descobri que ele só funciona para imagens 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);

É aqui que a imagem é carregada em uma caixa de imagem:

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;
            }
        }

E é aqui que ele está sendo salvo sem edições:

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);

Nota: imageFileNames [] é apenas uma matriz de cadeias que possui alguns dos nomes de arquivo nos quais as imagens devem ser salvas.

Todas as idéias serão apreciadas e agradecemos antecipadamente.

questionAnswers(2)

yourAnswerToTheQuestion