Bitmap aus Speicher anzeigen



  • Hallo,

    ich bin neu hier und habe seit ein paar Tagen ein riesen Problem. Ein Freund meinte ich sollte mich an euch wenden.

    Ich nutze Turbo C++ Version 10.0.2288.42451 Update 2 auf Windows XP

    Mein Problem, ich habe eine Funktion:
    int WINAPI DXC_Convert(int id, WORD *pdwRAWData, BYTE *pbBmpData);
    id ist ein Identifizierer (hab ich),
    pdwRAWData ist ein Zeiger auf RAW Daten (hab ich auch),
    pbBmpData ist ein Zeiger auf einen Speicherbereich für Bitmapdaten

    Beschreibung:
    DXC_Convert stellt die eigentliche Konvertierungsfunktion dar. Sie verwandelt RAW Daten die von DXGetBuffer geliefert werden, in ein Windows BMP Format um.

    Das Funktioniert soweit auch, aber ich habe keine Ahnung, wie ich diesen Kram nun in ein TImage geladen/kopiert kriege.
    Also wie ich die BMP Daten angezeigt bekomme...

    Hilfe 😞



  • du speicherst die bmp ab?
    wenn ja dann ist es recht einfach.
    du müsstest ja vom abspeichern den Pfad noch haben und mit folgender Funktion lädst du die BMP in die TImage:
    und als was hast du den pfad vorliegen , welcher Variablen Typ muss evtl noch umgewandelt werden?

    Image1->Picture->LoadFromFile(PFAD ZUR BMP); // zum Beispiel C:\\Pic oder mit String Variable
    

    Ich hoffe ich hab dich richtig Verstanden.



  • Ist doch gar nicht nötig, wenn er das als TBitmap hat, dann kann er das auch dem direkt zuweisen. Wenn er es aber als Windows-Bitmap hat, muss er das erst in ein TBitmap konvertieren. Ich weiß allerding nicht, ob TBitmap das kann, oder ob man dann einen Umweg über einen Stream nehmen muß...



  • Ihr habt mich leider falsch verstanden 😕
    @Tim06TR, das ist leider keine Datei, sondern ein Pointer auf Bitmapdaten die windows kompatibel sind.

    @Joe_M., leider geht das so direkt auch nicht, es ist eben kein TBitmap Objekt sondern einfach nur die Daten im Pixel Format, aber so dass Windows damit was anfangen kann.

    Ich habs jetzt ertmal so gelöst:

    TMemoryStream *s = new TMemoryStream;
    BMPFileHeader *MyBMPFileHeader = new BMPFileHeader
    
    // File Header befüllen ...
    
    s->WriteBuffer("BM", 2);
    s->WriteBuffer(MyBMPFileHeader, 12);
    s->WriteBuffer(pBitmapInfo, pBitmapInfo->bmiHeader.biSize);
    s->WriteBuffer(pBitmap, pBitmapInfo->bmiHeader.biSizeImage);
    s->Seek(0,0);
    Image1->Picture->Bitmap->LoadFromStream(s);
    

    Das geht zumindest erstmal, aber das Bild ist verschoben, d.H. ich den Rand in der Mitte.
    Jemand eine Idee, woher das stammen könnte?



  • Das Problem hab ich inzwischen auch gelöst, die Palette hat nicht gestimmt. Nachdem ich die Palette korrigiert hatte (mit Nullen aufgefüllt), hat es funktioniert.

    Aber danke für eure Hilfe 🙂


Anmelden zum Antworten