2011-04-20 2 views
0

lorsque je crée une image bitmap comme ceci:.bmp n'est pas une bitmap Windows?

var testImage = new Bitmap(320, 240); 
       var testDataLock = testImage.LockBits(new Rectangle(new Point(), testImage.Size), 
            System.Drawing.Imaging.ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); 

       unsafe 
       { 
        var aaa = CamData.ToArray(); 
        UInt32 lOffset = 0; 
        UInt32 lPos = 0; 
        byte* lDst = (byte*)testDataLock.Scan0; 
        byte bitshift = 8; 
        fixed (UInt16* lSrc = aaa) 
        { 
         while (lOffset < testImage.Width * testImage.Height) 
         { 
          lDst[lPos] = (byte)(lSrc[lOffset] >> bitshift); 
          lDst[lPos + 1] = lDst[lPos]; 
          lDst[lPos + 2] = lDst[lPos]; 

          lOffset++; 
          lPos += 3; 

          // take care of the padding in the destination bitmap 
          if ((lOffset % testImage.Width) == 0) 
           lPos += (UInt32)testDataLock.Stride - (uint)(testImage.Width * 3); 
         } 

        } 
       } 
       testImage.UnlockBits(testDataLock); 
       testImage.Save(@"H:\Test.bmp"); 

J'obtiens toujours une erreur en essayant d'ouvrir ce fichier avec une visualisation lib:

Unknown file type! H:\test.bmp is not a Windows BMP file! 

mais dans les fenêtres, je peux ouvrir le fichier avec le spectateur etc ... il n'y a pas de problèmes est-ce que quelqu'un sait pourquoi je reçois cette erreur?

grâce

Répondre

2

vous pouvez enregistrer un System.Drawing.Bitmap à une fenêtre valide .bmp comme ceci:

//bmp is a System.Drawing.Bitmap 
bmp.Save("MyBitmap.bmp", ImageFormat.Bmp); 

Le second paramètre (que vous n'avez pas inclus) spécifie le format dans lequel le bitmap doit être enregistré .

Aussi, assurez-vous de vérifier si votre lib de visualisation prend en charge 24 bits par bitmaps Pixel, puisque c'est le format que vous créez votre bitmap dans

voir:. PixelFormat.Format24bppRgb

+0

Ce. Je ne suis pas sûr du format qu'il choisirait par défaut, mais il est toujours bon d'être explicite. –

+0

ooh si facile :), merci :) – h0ppel

1

Comme vous pouvez read at MSDN en la section Remarques votre image sera enregistrée au format PNG si aucun encodeur n'est spécifié.

+0

N'a pas pensé à vérifier ce qui se passerait exactement si vous ne spécifiez pas un encodeur. +1 –

Questions connexes