teil eines TBitmap in ein anderes TBitmap kopieren



  • hallo

    hab eine einfache frage
    (Borland c++ Builder 6 win xp sp 2)

    ich will ein teil eines bitmaps in einen anderen bitmap speichern
    also ich habe ein walkcykle und will nun ein bestimmtes bild ausschneiden damit ich das anzeigen kann

    for(i = 0; i <= EinBilderGroesse; i++)
      {
       for(j = 0; j <= EinBilderGroesse; j++)
        {
         PixelFarbe = WalkeCykleBitmap->Canvas->Pixels[i+BilderAnfangX][j+BilderAnfangY];
         AktuellesBitmap->Canvas->Pixels[i][j] = PixelFarbe;
        }                   //kopiert das bild was gebraucht wird aus dem walkcykle
      }
       EinPfad = Pfad + "\\" + "neu.bmp";
       AktuellesBitmap->SaveToFile(EinPfad);
    

    ich bekomme keine fehlermeldung, und es fkt auch
    nur wenn ich aktuellesBitmap speichere bekomme ich ein leeres bmp
    also fkt der kopiervorgang nicht.
    wenn ich pixelfarbe mit einer festen farbe clRed ersetze müsste eigendlich das ganze bitmap rot werden, das fkt auch nicht

    könnt ihr mir bitte helfen,
    kennt ihr eine schnellere kopiermethode
    oder habt bessere vorschläge für die lösung des problems?

    danke
    flo



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo,

    Zum Kopieren eines Bitmapteiles gibt es doch TCanvas::CopyRect.



  • hmm

    ok danke

    AktuellesBitmap->Canvas->CopyRect(ARect, WalkeCykleBitmap, BRect);
    

    nur damit ich das richtig verstehe

    ARect = ist die größe des Bildes, also von AktuellesBitmap, oder das wo es hinkopiert werden soll

    BRect = ist die fläche die wir kopieren wollen

    in die mitte müss doch das bild von dem wir kopieren wollen, nur ist soll das ein TCanvas sein, was ist das?
    WalkeCykleBitmap ist ein TBitmap

    danke

    flo



  • ARect - ist das Zielrechteck (bei dir in AktuellesBitmap)
    BRect - ist das Quellrechteck (aus WalkeCykleBitmap)
    Du mußt das Canvas angeben aus dem du kopieren willst, also so

    AktuellesBitmap->Canvas->CopyRect(ARect, WalkeCykleBitmap->Canvas, BRect);
    

    Das steht aber auch alles in der Hilfe (mit Beispiel).



  • Schau doch mal in die Hilfe zu CopyRect, da ist auch ein Beispiel.



  • danke

    ich hab in der hilfe nachgeschaut, leider ist die bei mir jetzt auf engl.
    und das mit dem canvas war mir nicht klar
    kann man die hilfe auf deutsch updaten?

    hab da immer noch ein problem

    er zeigt leider nix an, in dem gespeicherten bild.
    wenn ich walkcyklebitmap speichere, dann fkt es.

    int i, j, BilderAnfangX, BilderAnfangY;
     AnsiString EinPfad;
     TColor PixelFarbe;
     TRect ARect, BRect;
    
     ARect.left    = 0;
     ARect.top     = 0;
     ARect.right   = EinBilderGroesse;
     ARect.bottom  = EinBilderGroesse;
    
     BilderAnfangX = EinBilderGroesse * (EinBildPosX - 1);
     BilderAnfangY = EinBilderGroesse * (EinBildPosY - 1);
    
     BRect.left    = BilderAnfangX;
     BRect.top     = BilderAnfangY;
     BRect.right   = BilderAnfangX + EinBilderGroesse;
     BRect.bottom  = BilderAnfangY + EinBilderGroesse;
    
     AktuellesBitmap->Canvas->CopyRect(ARect, WalkeCykleBitmap->Canvas, BRect);
    
       EinPfad = Pfad + "\\" + "neu.bmp";
       AktuellesBitmap->SaveToFile(EinPfad);
    

    bei google habe ich das gefunden

    if (x + 10 <= 724)
    {
    x +=10;
    TRect Ziel = Rect(0, 0, 300, 300);
    TRect Ausgang = Rect(x, y, x + 300, y + 300);
    Canvas->CopyRect(Ziel, Bitmap->Canvas, Ausgang);
    }
    

    http://entwickler-forum.de/archive/index.php/t-4003.html

    wo kopiert er das bild hin?

    wäre für eure hilfe wirklich dankbar



  • Ist dein AktuellesBitmap überhaupt groß genug um alles aufzunehmen was du da reinkopieren willst?



  • hmm?

    global:
    Graphics::TBitmap *AktuellesBitmap = new Graphics::TBitmap();
    Graphics::TBitmap *WalkeCykleBitmap = new Graphics::TBitmap();

    mehr habe ich zur ini nicht gemacht

    ich dachte er nimmt sich den platz den er braucht?

    danke

    flo



  • Besorg Dir mal die deutsche Version des BCB. Ohne Hilfe wirst Du mit dem BCB nicht viel anfangen können.

    Und nein, die Größe mußt Du selbstverständlich selbst festlegen, ebenso das Farbformat.



  • hast du ne ahnung was bcb kostet 😃

    flo



  • Ja hab ich, ich hab einen gekauft.



  • ah super es fkt
    danke nochmals

    also falls es jemanden interessier

    AktuellesBitmap->Height = EinBilderGroesse; // gibt die hoehe vom bitmap an
    AktuellesBitmap->Width = EinBilderGroesse; // gibt die breite vom bitmap an

    AktuellesBitmap->Canvas->CopyRect(ARect, WalkeCykleBitmap->Canvas, BRect); //kopiert das teil des bildes

    danke

    gibt es eine schüler version vom bcb
    hab nur eine engl ebay version

    flo


Anmelden zum Antworten