Question

Je dois convertir une image PNG chargé à partir d'un fichier dans un tableau de 8 octets bits par pixel utilisé par un autre appareil (programmation embarquée).

Je copie sur pixel par pixel dans une nouvelle image créée avec une couleur 16 bits - Format16bppRgb565, mais je dois Format8bpp, qui ne figure pas dans le .NET Framework. (Je ne peux pas utiliser Format8bppIndexed depuis l'autre appareil ne peut pas gérer bitmaps indexés)

 Bitmap img = new Bitmap(imgPath);
 Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
 for (int I = 0; I <= img.Width - 1; I++) {
     for (int J = 0; J <= img.Height - 1; J++) {
         img8.SetPixel(I, J, img.GetPixel(I, J));
     }
 }

Alors, comment puis-je convertir une image en 8 bits par tableau d'octets de pixel?

  • Puis-je utiliser le format indexé 8 bits et extraire les octets? - Format8bppIndexed
  • Puis-je calculer les couleurs des pixels par réduction de la couleur R, G, B à des valeurs de 8 bits 32 bits?
  • Y at-il une bibliothèque C # qui fait déjà?
  • « La meilleure façon est de créer un nouveau bitmap 8 bits, et dessiner votre image 24 bits sur elle. » - comment
Était-ce utile?

La solution

Bien que je ne suis pas sûr de savoir comment faire à la vanille C # simple que vous pouvez utiliser le FreeImage Projet bibliothèques pour convertir les formats d'images:

  

FreeImage est une bibliothèque Open Source   projet pour les développeurs qui souhaitent   pour soutenir l'image graphique populaire   formats tels que PNG, BMP, JPEG, TIFF et   d'autres, au besoin par le multimédia d'aujourd'hui   applications. FreeImage est facile à   utilisation, rapide, sûre multithreading,   compatible avec toutes les versions 32 bits de   Windows et multiplateforme (œuvres   à la fois avec Linux et Mac OS X).

Il est écrit en C ++, mais a de bonnes wrappers .NET que vous pouvez utiliser.

Autres conseils

Je l'ai déjà fait dans ce projet un modèle de reconnaissance. Recherche des livres de traitement d'image et de reconnaissance de formes, vous pouvez trouver ces solutions.

a) Si vous voulez convertir, vous trouverez niveau de gris en général deux solutions.

# 1 calcul de la moyenne des canaux RVB. - On peut prendre des valeurs de 8 bits pour seul canal Avery et calculer pixel = (R + G + B) / 3

# 2 Prenez seulement la composante verte. Il est optimisé.

b) Si vous voulez convertir à la représentation de couleur 8bit vous devez utiliser une table de couleurs.     Vous pouvez voir ici une solution http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion .aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top