C# - Copiez une Image dans un 8-bit Image Indexée
Je veux créer un 8-bit image indexée à partir d'une Image 32 bits de l'objet.
Bitmap img = new Bitmap(imgPath); //32-bit
Bitmap img8bit = new Bitmap(imgW, imgH, Format8bppIndexed); //8-bit
//copy img to img8bit -- HOW?
img8bit.Save(imgNewPath, ImageFormat.Png);
Je ne peux pas utiliser SetPixel pour la copier pixel-par-pixel étant donné que les Graphiques ne fonctionne pas avec les images indexées.
Quoi d'autre?
OriginalL'auteur Robinicks | 2009-11-19
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé un C# bibliothèque qui convertit une image bitmap dans une palettized (8 bits) de l'image. La technique est rapide, parce qu'il appelle GDI32 (windows, le système graphique) directement.
Convertir à une 8bpp (palettized) de l'image avec une palette nuances de gris, ne
Si vous souhaitez convertir une image avec une autre palette, regardez les commentaires dans le code source de CopyToBpp pour des suggestions. Notez que, lorsque vous convertissez un 1bpp ou 8bpp palettized copie, Windows va chercher à chaque pixel un par un, et de choisir la palette d'entrée qui est plus proche de ce pixel. En fonction de votre image source et le choix de la palette, vous peut très bien se retrouver avec une image qui utilise seulement la moitié de l'couleurs disponibles dans la palette.
OriginalL'auteur Robinicks
De la conversion d'un arbitraire image RGBA pour un 8-bit bitmap est un non-trivial de l'opération; que vous avez à faire quelques calculs pour déterminer le top 256 couleurs et à tour de repos (ou de faire du dithering, etc).
http://support.microsoft.com/kb/319061 a les détails de tout, sauf pour un bon algorithme, et il devrait vous donner une idée de la façon d'obtenir commencé.
OriginalL'auteur Paul Betts