Image schneiden



  • Hallo,

    Hab nen Screenshot wie in der FAQ beschrieben (Version 2) gemacht und
    diesen nun in einem TImage drinnen.

    Mir wär es eine grosse Arbeitsersparnis, wenn man dieses Bild gleich beschneiden könnte (es handelt sich um einen rechteckigen Ausschnitt, der immer an der selben
    Position liegt).

    Nur leider hab ich so ganz und gar keine Ahnung, wie ich das machen soll.
    Wenn's allerdings recht aufwendig is, schneid ich lieber weiterhin mit nem Grafikprogramm 😉

    thx,
    Martin



  • moin,
    versuch's mal so:

    Graphics::TBitmap *bitmap1=new Graphics::TBitmap;
    TMemoryStream *Stream1=new TMemoryStream;
    
    Image1->Picture->SaveToStream(Stream1);
    
    bitmap1->LoadFromStream(Stream1);
    
    //jetzt kommt's  :D 
    
    Image1->Width=50;
    Image1->Height=50;
    Image1->CopyRect(Rect(x, y, x+width, y+height), bitmap1->Canvas, Rect(0,0,width, heigt));
    
    delete bitmap1, Stream1;
    

    Vielleicht sind noch fehler drin, habs nicht getestet 🙂

    mfg, chris90



  • Danke erstmal.

    Wenn ich den Umweg über ein zweites TImage gehe, dann funktioniert das Schneiden:

    TRect myRect = Rect(100,100,200,200);
    Image2->Canvas->CopyRect(Rect(0,0,100,100),Image1->Canvas,myRect);
    

    danke
    Martin

    PS:
    Bei obigem Beispiel funktioniert irgendwie das

    bitmap1->LoadFromStream(Stream1);
    

    nicht.

    Wenn ich die Größe vom Stream abfrage, krieg ich noch nen Wert
    => es sollten Daten drin sein

    aber nach dem LoadFromStream hat das Bitmap Höhe == Breite == 0 😞



  • Beim Arbeiten mit Streams immer daran denken, wo sich der aktuelle Offset befindet.
    Nach dem Laden in den Stream steht der Zeiger logischerweise am Ende des Streams. Wenn man jetzt aus dem Stream lädt ist das Ergebnis Null, da vom Ende des Streams nichts gelesen werden kann. Also vorher den Zeiger auf die gewünschte Startposition setzen, üblicherweise an den Anfang des Streams.

    Für deine Zwecke war das mit dem Stream aber ohnehin überflüssig.
    Und wenn du die zweite Screenshot-Variante aus der FAQ verwendest kannst du dir auch das zusätzlich Image bzw. Bitmap sparen und gleich den gewünschten Ausschnitt "copyrecten".


Anmelden zum Antworten