"Thumbnails" aus TImage erzeugen [gelöst]



  • Hallo Leute
    Hätte nicht gedacht, dass mir das mal Probleme bereitet.
    Aber ich bekomme es einfach nicht hin, aus mehreren "grossen" JPeg-Bildern (2000 x 3000 pixel, ca. 2 Mb) kleine Vorschaubilder zu generieren.
    Habe einiges mit StrechDraw u.s.w. probiert aber das erzeugte mir eine noch grössere JPeg-Datei.
    Hier einer meiner Versuche:

    int percent=10;
    		for (int i = 0; i < FileListBox1->Items->Count; i++) {
    		TJPEGImage *jpg = new TJPEGImage();
    		jpg->LoadFromFile(FileListBox1->Items->Strings[i]);
    		Image1->Canvas->StretchDraw(Rect(0,0,Image1->Width/percent,Image1->Height/percent),jpg);
    		Image1->Picture->Bitmap->Width=Image1->Picture->Bitmap->Width/percent;
    		Image1->Picture->Bitmap->Height=Image1->Picture->Bitmap->Height/percent;
    		Image1->Picture->SaveToFile(SourceDir+"//Thumbs//"+ExtractFileName(FileListBox1->Items->Strings[i]));
    		delete jpg;
    		}
    

    Kann mir jemand sagen, wie man ordendlich Thumbnails erzeugt, die dann auch wirklich kleinere Bilder sind und weniger Speicherplatz brauchen?
    Bin seit Stunden am Versuchen und habe google auch schon durch.
    Also das verkleinern der Bilder ist kein Problem aber das Abspeichern der verkleinerten Bilder, die dann auch nur einige Kb gross sind.
    Sage schonmal Danke.



  • Du kannst CopyRect benutzen, wenn ich mich richtig erinner.

    Dann kannst du ein Bildausschnitt in einen kleineren kopieren, der macht scaling automatisch.



  • Hallo.
    Vielen Dank für den Tip mit

    Canvas->CopyRect(...)
    

    .Leider gabs beim verkleinern extreme Artefakte in den Thumbs.
    Keine Ahnung woran das liegt.

    Aber mit

    Canvas->StretchDraw(...)
    

    gibts saubere Thumbs.

    Habs jetz, ohne TImage zu benutzen, so gelöst:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TJPEGImage *jpg = new TJPEGImage;
    MyBitmap = new Graphics::TBitmap;
    jpg->LoadFromFile("G:\\Bild.jpg");
    MyBitmap->Assign(jpg);
    float fak=GetFaktor(jpg->Width,jpg->Height,200);
    int jpgBr=jpg->Width*fak;
    int jpgHo=jpg->Height*fak;
    TRect Ziel = Rect(0,0,jpgBr, jpgHo);
    MyBitmap->Canvas->StretchDraw(Ziel,MyBitmap);
    MyBitmap->PixelFormat=pf24bit;
    MyBitmap->Width=jpgBr;
    MyBitmap->Height=jpgHo;
    jpg->Assign(MyBitmap);
    jpg->SaveToFile("G:\\Thumbs\\th_Bild.jpg");
    delete jpg;
    delete MyBitmap;
    }
    //---------------------------------------------------------------------------
    float TForm1::GetFaktor(int BildBreite,int BildHoehe, int ZielWert)
    {
    float br,ho,we,erg;
    br=BildBreite;
    ho=BildHoehe;
    we=ZielWert;
    if (BildBreite>=BildHoehe) {
    erg=we/br;
    }
    if (BildHoehe>BildBreite) {
    erg=we/ho;
    }
    return erg;
    }
    

    Danke nochmal für den Versuch, zu Helfen.
    wNw


Log in to reply