Domanda

Ho bisogno di convertire un PNG Immagine caricato da un file in un bit-per-pixel array di 8 byte utilizzato da un altro dispositivo (programmazione embedded).

Sono la copia su pixel per pixel in una nuova immagine creata con un colore a 16 bit - Format16bppRgb565, ma ho bisogno Format8bpp, che non è presente in .NET Framework. (Non posso usare Format8bppIndexed poiché l'altro dispositivo non supporta bitmap indicizzati)

 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));
     }
 }

Quindi, come posso convertire un'immagine in un 8-bit per matrice di pixel di byte?

  • Posso utilizzare il formato indicizzato a 8 bit ed estrarre i byte? - Format8bppIndexed
  • Posso calcolare i colori dei pixel riducendo il colore R a 32 bit, G, B i valori a 8-bit?
  • C'è una libreria C # che fa questo già?
  • "Il modo più semplice è quello di creare un nuovo 8 bit bitmap e disegnare l'immagine a 24 bit su di esso." -? Come
È stato utile?

Soluzione

Anche se non sono sicuro di come farlo con plain vanilla C # è possibile utilizzare il FreeImage Progetto librerie per convertire le immagini formati:

  

FreeImage è una libreria open source   progetto per gli sviluppatori che desiderano   per contribuire all'immagine grafica popolare   formati come PNG, BMP, JPEG, TIFF e   gli altri in base alle esigenze multimediali di oggi   applicazioni. FreeImage è facile   usare, veloce, sicura multithreading,   compatibile con tutte le versioni a 32 bit di   Windows e multipiattaforma (funziona   sia con Linux e Mac OS X).

E 'scritto in C ++, ma ha buone wrapper NET è possibile utilizzare.

Altri suggerimenti

L'ho già fatto in un unico progetto di pattern recognition. Cercando alcuni libri di elaborazione delle immagini e pattern recognition si possono trovare queste soluzioni.

a) Se si desidera convertire in scala di grigi si può trovare in due soluzioni generali.

# 1 Una media di canali RGB. - Si può prendere valori a 8 bit per Avery singolo canale e calcolare pixel = (R + G + B) / 3

# 2 Prendere solo la componente verde. E si vede meglio.

b) Se si desidera convertire in rappresentazione dei colori a 8 bit è necessario utilizzare una tabella di colori.     Si può vedere una soluzione qui http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top