2012-04-03 2 views
2

Je sais comment convertir un tableau d'octets en image. Voici mon code:comment convertir un tableau d'octets BGR en image

//Here create the Bitmap to the know height, width and format 
Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
//Bitmap bmp = new Bitmap(width, height); 

//Create a BitmapData and Lock all pixels to be written 
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(
        new Rectangle(0, 0, bmp.Width, bmp.Height), 
        ImageLockMode.WriteOnly, bmp.PixelFormat); 

//Copy the data from the byte array into BitmapData.Scan0 
Marshal.Copy(imgDataArray, 0, bmpData.Scan0, imgDataArray.Length); 
//Unlock the pixels 
bmp.UnlockBits(bmpData); 
bmp.Save("output1.png", System.Drawing.Imaging.ImageFormat.Png); 

Mais quand tableau d'octets est le format BGR, la couleur d'image est fausse (rouge est bleu, le bleu est rouge). Tout le monde peut m'aider à comprendre cela? Merci.

Répondre

2

Il semblerait que vous deviez parcourir la matrice et inverser les valeurs R/B pour chaque pixel. Cela devrait être assez simple.

Il y a du code dans l'article au http://www.codeproject.com/Articles/2056/Image-Processing-for-Dummies-with-C-and-GDI-Part-3 sous l'en-tête Edge Enhancement qui devrait faire le travail.

+0

Oui, cela fonctionne. Mais cela prend trop de temps à traiter. –

+0

Eh bien, toute exigence de vitesse n'était pas spécifiée. Il devrait être possible de faire une telle conversion très rapidement. Vous devez écrire votre propre fonction de conversion d'image optimisée, ou évaluer les bibliothèques de traitement d'image tierces jusqu'à ce que vous en trouviez une qui fonctionne assez rapidement pour vos besoins. Peut-être pourriez-vous également obtenir vos données sources dans un autre format. – djdanlib

Questions connexes