8Bit monochrom Bitmap speichern



  • Hallo zusammen,

    ich hab gerade ein Problem mit dem Verarbeiten eines Bitmaps. Ich
    lese von einer USB-Camera ein monochromes Bild ein. Dessen Bildinformationen liegen in einem char-Array zur Weiterverarbeitung bereit.

    FrameBuffer = gcnew array<unsigned char>(800*600);
    nativeBytes = new unsigned char[FrameBuffer->Length];
    
    CAM_GetCurrentFrame(handle, 1, nativeBytes);
    

    In der Doku zur Kamera wird beschrieben, dass die BitmapData Größe bestimmt wird durch

    "In Bitmap Data Format, for Mono camera, At least (Row x Column ) Bytes. For Mono camera, as internally we generate a 8bit bmp, so the buffer points to
    typedef struct {
    unsigned char Bitmap[Rows][Columns];
    } tDIBImageData;
    Each pixel contain a byte, which represents the gray level ( 0 – 255), please note that for BMP, the Rows are from
    bottom to top of the image, Columns are from Left to Right."

    ...

    Ich versuche nun das Bild intern zu verarbeiten und dann auf der HDD zu speichern. Jedoch habe ich im Moment das Problem, dass ich für diese Konstellation kein geeignetes PixelFormat finde. Wenn ich "Format8bppIndexed" benutze, dann wird das Bild nicht monochrom angezeigt, sondern es erscheint in verschiedenen Farben. Wenn ich es auf "Format24bppRgb" setze, dann werden mir drei kleine monochrome Bilder in dem eigentlichen 800*600 Frame angezeigt. Also in beiden Fällen ist die Verarbeitung falsch!! Leider hab ich bis jetzt keine andere Lösung gefunden, weshalb ich hoffe, von euch Hilfe zu bekommen.

    Marshal::Copy( IntPtr(nativeBytes), 						   FrameBuffer, 0, FrameBuffer->Length); 
    
    Bitmap^ bmp = gcnew Bitmap(800, 600, PixelFormat::Format8bppIndexed);
    
    BitmapData^ bmpData = bmp->LockBits(Rectangle(0,0,bmp->Width,bmp->Height),									ImageLockMode::WriteOnly, bmp->PixelFormat);
    
    Marshal::Copy(FrameBuffer, 0, bmpData->Scan0, FrameBuffer->Length);
    bmp->UnlockBits(bmpData);
    

    Wie schaffe ich es, ein 800*600px großes monochromes Bild abzuspeichern?
    Vielen Dank für eure Hilfe!!

    Gruß



  • Dann nimm Format8bppIndexed und ändere die Farbparlette mit bmp.Palette = ...


Anmelden zum Antworten