J'ai besoin de convertir des fichiers jpeg et png de 24 et 32 bits à une profondeur de bits inférieure (16). J'ai trouvé du code pour faire cela, mais les images résultantes gardent la profondeur du fichier original bien que la taille du fichier soit inférieure.save jpg avec une profondeur de bits inférieure (24 à 16 par exemple) (C#)
Image img = Image.FromFile(filePathOriginal);
Bitmap bmp = ConvertTo16bpp(img);
EncoderParameters parameters = new EncoderParameters();
parameters.Param[0] = new EncoderParameter(Encoder.ColorDepth, 16);
bmp.Save(filePathNew, jpgCodec, parameters);
bmp.Dispose();
img.Dispose();
...
private static Bitmap ConvertTo16bpp(Image img) {
var bmp = new Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
using (var gr = Graphics.FromImage(bmp))
{
gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
}
return bmp;
}
Une idée de ce qui ne va pas?
Merci, Frank
Je doute sérieusement la question. JPEG est un format en trois couleurs. Il a généralement 8 bits par couleur, mais peut avoir 12 ou 16. 24 = 3x8 bits de couleur est donc raisonnable, mais 16 ou 32 est tout simplement impossible. Il ne divise pas par trois. 3x16 = 48 serait possible, mais c'est une profondeur de couleur plus haute. – MSalters
en fait 32bit est possible 3x8 pour la couleur et un 4ème canal pour alpha (transparence) ... avec est stupide cuz jpeg ne supporte pas la transparence –