mein Graphics::TBitmap will nicht in mein Image1



  • Hier 'ne Kurzfassung von meinem Problem, ich habe 'nen Bitmap aus 'ner Funktion als Rückgabewert, übergebe diesem einem Image, aber das Image bleibt leer. Der Rückgabewert bildet sich aus einem Feld von einem DataSet und kommt aus einer SQL-Datenbank.
    Mein Problem, mein Image1 bleibt nach'm Klick bzw. taucht nicht im Image auf. Was mir beim Debuggen aufgefallen ist und ich merkwürdig finde, ist das mein TBitmap 'nen Canvas mit dem Wert "Null" hat, weiß aber nicht ob das eine Rolle spielt. Von daher dachte ich auch erst bzw. denke ich immer noch, das es an der Übergabe liegt.
    Das Bitmap ist in der Datenbank auch vorhanden, das habe ich vorher selbst hinein gespeichert mit einer anderen Funktion und ist aufrufbar mit einem TDBImage.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            Image1->Picture->Bitmap->FreeImage();
            Image1->Picture->Bitmap = Frame1->Testing();
    }
    //---------------------------------------------------------------------------
    
    Graphics::TBitmap *__fastcall TFrame1::Testing()
    {
            ((TBlobField*)DataModule1->ADODSDataSet1->FieldByName("Abbildung"))->SaveToStream(pStream);
            pBitmap->LoadFromStream(pStream);
            return pBitmap;
    }
    

    und pBitmap / pStream sehen aus

    class TFrame1 : public TFrame
    {
    __published:	// Von der IDE verwaltete Komponenten
    private:	// Anwender-Deklarationen
            TMemoryStream *pStream;
            Graphics::TBitmap *pBitmap;
    public:		// Anwender-Deklarationen
            __fastcall TFrame1(TComponent* Owner);
            Graphics::TBitmap *__fastcall Testing();
    };
    

    Kann mir einer helfen? Wäre sehr dankbar 🙂

    Come back soon
    Vo



  • Zeigt mir ein Bild.

    Image1->Picture->Bitmap->FreeImage();
            Graphics::TBitmap *bmp = new Graphics::TBitmap();
            OpenPictureDialog1->Execute();
            bmp->LoadFromFile(OpenPictureDialog1->FileName);
            Image1->Picture->Bitmap = bmp;
            delete bmp;
    

    Zeigt mir ein leeres Bild.

    Image1->Picture->Bitmap->FreeImage();
            Graphics::TBitmap *bmp = new Graphics::TBitmap();
            TMemoryStream *stream = new TMemoryStream();
            OpenPictureDialog1->Execute();
            bmp->LoadFromFile(OpenPictureDialog1->FileName);
            bmp->SaveToStream(stream);
            bmp->FreeImage();
            bmp->LoadFromStream(stream);
            Image1->Picture->Bitmap = bmp;
            delete bmp;
            delete stream;
    

    Hat vielleicht jemand eine Alternative ein Bitmap aus einem DataSet zu laden, da es ja anscheinend ein Problem mit meinem TMemoryStream gibt.



  • Hallo

    Das Problem dürfte sein das du nach dem Laden des Bildes in den Stream und vor dem Auslesen des Bildes aus dem Stream den Stream erst zurücksetzen must, mit desen Methode Seek.

    bis bald
    akari



  • akari? Ich liebe dich 😃

    Danke für die schnelle Antwort, war mehr als hilfreich, dank des

    stream->Seek(0, soFromBeginning);
    

    funktioniert es, und ich kann endlich mit meiner Bildbearbeitung fortsetzen.

    Möge die Macht mit Euch sein...
    Vo



  • stream->Position = 0; erfüllt den gleiche Zweck.


Anmelden zum Antworten