Ne pouvez pas définir la palette en bitmap
J'ai écrit un PCX décodeur et, jusqu'à présent, l'image PCX se traite très bien, mais je ne peux pas travailler sur la façon de définir la palette d'une image bitmap.
J'ai créé une image bitmap comme suit:
Bitmap bmp = new Bitmap(width,
height,
stride2,
System.Drawing.Imaging.PixelFormat.Format8bppIndexed,
pixels);
Mais je n'arrive pas à définir la palette à l'aide de la méthode suivante:
for (int i = 0; i < 256; i += 3)
{
Color b = new Color();
b = Color.FromArgb(palette[i], palette[i + 1], palette[i + 2]);
bmp.Palette.Entries.SetValue(b, i);
}
Dans cet exemple, j'ai lu à travers chaque octet dans la palette du fichier pcx et stockés dans la palette[]. à partir de là, j'ai utilisé cette fonction pour définir les entrées de la palette de l'image bitmap. Comment puis-je régler les couleurs?
- Ne vous inquiétez pas, il fixe maintenant.
Vous devez vous connecter pour publier un commentaire.
Cela me faisait trop confus. Il semble bitmap.La Palette renvoie un clone de l'image de la palette. Une fois que vous avez modifié votre copie, vous devez réinitialiser l'image bitmap de la palette en utilisant
bitmap.Palette = palette
, par exempleVoir http://www.charlespetzold.com/pwcs/PaletteChange.html
Selon Microsoft Source De Référence,
Palette
propriété deImage
classe .net, en interne utilise GDI+ Plat Api pour la manutention de palettes.GdipGetImagePalette
utilisé pour l'initialisation deColorPalette
objet dansget
méthode etGdipSetImagePalette
utilisés pour l'écriture,ColorPalette
données de l'objet à l'arrière de l'appareil estset
méthode.À chaque fois dans votre
for
de la boucle de la lignebmp.Palette.Entries.SetValue(b, i);
les forces de l'Image à l'appelGdipGetImagePalette
et les données debmp.Palette
réinitialisé et, par conséquent, vous pouvez voir qu'aucune modification n'a été apportée àbmp.Palette
après la boucle.Pour résoudre ce problème, vous devez effectuer les opérations suivantes:
bmp.Palette
par l'affectation à une variable,bmp.Palette
.Code:
À mon avis, le remplacement de la définition de
Palette
comme une propriété avecGetPalette()
etSetPalette()
méthodes par Microsoft, sera d'une grande aide à éviter la confusion.