jpg/DBImage



  • Hallo zusammen,
    wie so oft, ist es bestimmt nur die berühmte Leitung auf der ich stehe.
    Ein DBImage wird standardmäßig (builder 6 C++) mit einem *.bmp geladen und gespeichert (in einer Paradox.DB). Ich möchte aber auch noch *.jpg oder *.jpeg laden und speichern und habe folgendes versucht:

    if(OpenPictureDialog1->Execute())
    {
    //jpg und jpeg------------------
    if((ExtractFileExt(LowerCase(OpenPictureDialog1->FileName)) == ".jpg") ||
    (ExtractFileExt(LowerCase(OpenPictureDialog1->FileName)) == ".jpeg"))
    {
    //TImage *MyNewImage = new TImage(Application);
    //MyNewImage->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    //TJPEGImage *MyNewJPEGImage = new TJPEGImage();
    //MyNewJPEGImage->Assign(MyNewImage->Picture->Bitmap);
    //MyNewImage->Picture->Bitmap->Assign(MyNewJPEGImage);
    //delete MyNewJPEGImage;
    //DBImage2->Picture->Bitmap = MyNewImage->Picture->Bitmap;
    //delete MyNewImage;
    TImage Image = new TImage(Application);
    Image->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    Graphics::TBitmap
    Bitmap = new Graphics::TBitmap();
    //Bitmap->Canvas->Draw(Image->Width, Image->Height, Image->Picture);
    Bitmap->Width=Image->Width;
    Bitmap->Height=Image->Height;
    Bitmap->Canvas->Draw(0,0, Image->Picture->Graphic);
    Image->Picture->Bitmap;
    }
    else
    {
    //bmp----------------------------------
    AnsiString CurrentFile;
    CurrentFile = OpenPictureDialog1->FileName;
    DBImage2->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    }
    }

    Bei dem *.bmp funktioniert es perfekt. Bei dem *.jpg zeigt es mir nicht mal das Bild in DBImage.
    Wo liegt mein Denkfehler?????

    LG
    Traugott



  • @Traugott

    Bitte fass deinen Code in Code-Tags ein und entferne auskommentierten Zeilen. Im Moment weiß ich nicht genau, was du tust.
    IIRC ist die TImage Komponente etwas merkwürdig zu behandeln, weil es im Picture-Attribut ein Element für jeden Bildtypen hat (Bitmap für Bitmaps, Graphic für andere).
    Du kannst versuchen, das JPEG in ein TJPEGImage zu laden, anschließend ein TBitmap der gleichen Größe erzeugen und den JPG Canvas auf den Bitmap Canvas kopieren.

    Edit?
    BCB 6? Von 2002? uiuiui



  • @Traugott
    Wie speicherst du dein Bitmap in die Datenbank.
    Würde mich interessieren, da ich eigentlich vor dem selben Problem stehe wie du....
    Kannst du mir da vielleicht helfen? Bist du hier schon weitergekommen?



  • Hallo,
    zuerst einmal ohne auskommentierte Zeilen

    if(OpenPictureDialog1->Execute())
    {
    //jpg und jpeg------------------
    if((ExtractFileExt(LowerCase(OpenPictureDialog1->FileName)) == ".jpg") ||
    (ExtractFileExt(LowerCase(OpenPictureDialog1->FileName)) == ".jpeg"))
    {
    TImage Image = new TImage(Application);
    Image->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    Graphics::TBitmap Bitmap = new Graphics::TBitmap();
    Bitmap->Width=Image->Width;
    Bitmap->Height=Image->Height;
    Bitmap->Canvas->Draw(0,0, Image->Picture->Graphic);
    Image->Picture->Bitmap;
    }
    else
    {
    //bmp----------------------------------
    AnsiString CurrentFile;
    CurrentFile = OpenPictureDialog1->FileName;
    DBImage2->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    }
    }

    in meiner Datenbank steht die Eigenschaft G für Graphik mit einer Größe von 240.
    Auf meiner Form habe ich einen DBNavigator und ein DBImage. Mit einem OpenPictureDialog hole ich meine *.bmp und speichere. Das funktioniert wunderbar; aber leider nur bei *.bmp. Ein *.jpg lässt sich auch noch laden, aber beim speichern ist es wieder weg. Das möchte ich halt so ändern, dass sich auch ein *.jpg nicht nur laden, sondern auch speichern lässt.

    LG
    Traugott


Anmelden zum Antworten