JPG Bild anzeigen lassen



  • Hallo, wie kann ich ein JPG Bild auf meiner Form anzeigen lassen. Ich krieg es nur mit BMP´s hin irgendwann wusste ich auch mal wie das ganze mit JPG´s geht aber ich kriegs nicht mehr hin. 😮



  • schau dir die Klasse TJPEGImage an.

    Kleines Beispiel:
    
    #include <jpeg.hpp>
    
    TJPEGImage *JPG = new TJPEGImage;
    JPG->LoadFromFile("C:\\MyPicture.jpg");
    
    Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    Bitmap->Assign(JPG);
    delete JPG;
    
    ...
    delete Bitmap;
    


  • Hallo, ich habs jetzt so gemacht:

    TJPEGImage *JPG = new TJPEGImage;
    			JPG->LoadFromFile( PictureName );
    
    			Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
    			Bitmap->Assign(JPG);
    			PaintBox1->Canvas->Draw(0,0,JPG);
    			delete Bitmap;
    			delete JPG;
    

    Ich lad erst ein großes Bild rein und anschließend ein kleineres und das kleinere Bild wird einfach nur über das große gezeichnet ohne das große Bild vorher zu entfernen. So verbrauche ich doch da unnötig Systemressourcen was mache ich da falsch?



  • Irgendwie ist das Müll was ich da schreiben. 😡

    http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/DE/html/delphivclwin32/jpeg_TJPEGImage.html

    Das ist dort einfach nicht vernünftig Dokumentiert für die Leute die kaum mit der VCL arbeiten. 😡

    Wie macht man es richtig?



  • Dem Canvas der PaintBox ist es egal, ob du da ein buntes Bild reingemalt hast oder ob es mit einer grauen Fläche gefüllt ist. Ressourcentechnisch macht das also keinen Unterschied.

    Wenn du ein Bild auf eine DIN-A4-Leinwand malst und später ein nur A5-grosses Bild darübermalst, dann ist logischerweise der Rest vom A4-Bild noch zu sehen.
    Lösung: entweder die gesamte Leinwand oder den "überstehenden" Bereich neutral bemalen.
    Genauso ist bei TCanvas vorzugehen.

    Wenn du übrigens mit PaintBox1->Canvas->Draw(0,0,JPG); direkt das JPG auf die Leinwand malst (funktioniert das so?), dann kannst du dir das Bitmap-Geraffel komplett sparen.



  • wenn du mehrere Bilder mit unterschiedlicher Größe nacheinander anzeigen möchtest, dann solltest du jeweils vor dem Zeichnen eines Bildes die Zeichenfläche löschen.
    Unnötigen Ressourcen werden dadurch nicht verbraucht, es sei denn, du vergißt JPG nach dem Zeichnen zu löschen.

    TJPEGImage *JPG = new TJPEGImage;
    JPG->LoadFromFile( PictureName );
    PaintBox1->Canvas->Clear(TAlphaColor(0xFFFFFFFF));
    PaintBox1->Canvas->Draw(0,0,JPG);
    delete JPG;
    

    Informationen zu TAlphaColor findest du in der Hilfe (Cursor auf TAlphaColor setzen und F1 drücken).


Log in to reply