Bilder stretchen



  • Hallo

    Ich habe ein Bild und möchte das gern in der Dimension ändern(Höhe oder/und Breite) und auch diese Änderung abspeichern. Weiss jemand wie man dies realisiert?

    Man kann TImage auf Stretch=true stellen, jedoch speichert er das Bild trotzdem in der Orginal Dimension.



  • Hallo

    TImage::Stretch ist nur für Anzeige des Bitmaps entscheident, nicht für die Daten des Bitmaps selber.
    Du must dir selber eine Routine schreiben bzw. im Netz suchen, die die einzelnen Pixel umrechnet.

    bis bald
    akari



  • #include <jpeg.hpp>
    

    ...

    TJPEGImage *jpg = new TJPEGImage();
     jpg->LoadFromFile( asAKTUELLER_FILE );
     jpg->Width=iYourWidth;
     jpg->Height=iYourHeight;;
     jpg->SaveToFile( asCopyFile );
     delete jpg;
    


  • Hallo

    @YLIBERUS : Hast du denn deinen Quellcode mal ausprobiert?
    Wenn ich das an einen JPG ausprobiere, kommt nur der Fehler "Die Größe eines JPEG kann nicht geändert werden" (hätte mich auch gewundert, wenn es anders wäre)

    Ersetzt man hingegen TJPEGImage durch Graphics::Bitmap, und verwendet ein Bitmap, kommt zwar kein fehler, aber das Bitmap wird nur um einen entsprechenden Rand erweitert, nicht vergrößert.

    Dazu braucht man nämlich einen speziellen Alogorithmus, damit es halbwegs anständig aussieht.

    bis bald
    akari



  • sorry habe nur etwas vergessen (ist schon etwas her das ich das mal gemacht habe 🙄 )

    #include <jpeg.hpp>
    #include "math.h"
    
    Graphics::TBitmap *bmp = new Graphics::TBitmap();
    Graphics::TBitmap *bmp2 = new Graphics::TBitmap();
     TJPEGImage *jpg = new TJPEGImage();
     jpg->LoadFromFile( "c:\\test.jpg" );
    
     TRect *ARect = new TRect;
     ARect->Top    	 = 0;
     ARect->Left   	 = 0;
     ARect->Right  	 = floor(ineueBreite);
     ARect->Bottom 	 = floor(ineueHoehe);
    
     bmp->Assign(jpg);
     bmp2->Width   	 = ineueBreite;
     bmp2->Height  	 = ineueHoehe;
     bmp2->Canvas->StretchDraw(*ARect,bmp);
    
     jpg->Assign(bmp2);
    jpg->SaveToFile( "c:\\test999guido.jpg" );
    delete jpg;
    delete bmp;
    delete bmp2;
    

    P.S. Ich habe es jetzt probiert und es funzt. 👍



  • Gleich mal ausprobieren. Vielen Dank! :=)


Anmelden zum Antworten