Je suis censé écrire un programme qui obtient des images PNG de l'utilisateur, fait quelques modifications simples comme la rotation et les enregistre dans un fichier JAR afin qu'il puisse utiliser les images comme Ressources. Le problème est quand j'ouvre, disons une image de 80kb et l'enregistre ensuite avec C#, j'obtiens une image avec la même qualité mais pour l'espace 130kb. Et parce qu'il doit aller dans un fichier JAR J2ME j'ai vraiment besoin de plus petites tailles, au moins la taille d'origine. J'ai essayé le code ci-dessous mais j'ai découvert plus tard qu'il ne fonctionne que pour les images Jpeg.C# - Comment changer la qualité PNG ou la profondeur de couleur
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à l'image est chargée dans une zone d'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à, il est en cours d'enregistrement en arrière sans modifications:
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);
Note: imageFileNames [] est juste un tableau de chaînes qui a certains des noms de fichiers avec lesquels les images doivent être enregistrées.
Toutes les idées seront appréciées et merci d'avance.
La taille du fichier est-elle modifiée lorsque vous réenregistrez l'image sans modifications? –
Salut Jacob, Oui je fais. – Auxiliary
Pouvons-nous voir le code où vous chargez l'image et le code où vous enregistrez l'image? Je ne vois pas de comportement similaire dans mon (simple) test. –