J'ai un programme pour combiner des fichiers graphiques dans une icône. Les tailles incluent 16,24,32,48,256 32bit. Ceux-ci utilisent PNG et fonctionne. J'ai l'en-tête correct et la liste d'enregistrement de répertoire/index.Enregistrer BMP dans le fichier d'icônes
Cependant, pour 8 bits j'utilise BMP avec les 14 premiers octets de l'en-tête d'un BMP enlevé. Cette partie du fichier d'icône ne fonctionne pas. Après avoir regardé une icône MS, ils ont de nouveau stocké BMP avec l'en-tête de 14 octets supprimé. En regardant leurs données BMP, ils ont le deuxième en-tête comme je le fais, mais pour 16x16 le deuxième en-tête (BITMAPINFOHEADER) dit 16x32. Les coutures BMP doivent être deux fois la largeur. Pourquoi? L'image est-elle deux fois plus large avec un masque ou quelque chose?
Voici mon code: (image Note est 32bit bitmap 32x32 lorsqu'il est passé.)
using (Bitmap imageAsBitmap = new Bitmap(image))
{
int colorCount = 0;
using (Bitmap bitmap = imageAsBitmap.ColourReduction256(out colorCount))
{
byte[] imageBytes = new byte[] { };
using (MemoryStream ms = new MemoryStream())
{
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
imageBytes = ms.ToArray();
}
byte[] data = new byte[] { };
Array.Resize(ref data, imageBytes.Length - 14);
Array.Copy(imageBytes, 14, data, 0, data.Length);
enteries.Add(new IconEntry(data, image.Width, image.Height, 8));
}
}
Le 'Array.Resize' semble inutile. Vous pouvez simplement déclarer les données comme 'new byte [imageBytes.Length - 14]'. – Abion47
@ Abion47 Essayez c'est un peu une habitude parce que j'ai fait beaucoup de comms où la taille n'est pas connue mais dans ce cas oui. Je pourrais modifier cette partie pour la rendre plus lisible. Merci. – James