StretchDraw - und das ganze Canvas ist weiß?



  • Hi,
    wie kann ich verhindern das bei einem Aufruf von StretchDraw das ganze Canvas (um das gestretchte Bild herum) weiß wird?

    BspCode:

    // ButtonClick
     // in Image1 ist ein Bild
     TRect rect;
     rect.Top = 0;
     rect.Left = 0;
     rect.Bottom = 10;
     rect.Right = 10;
     Image2->Canvas->StretchDraw(rect, Image1->Picture->Graphic);
     // jetzt ist das Image2 vollständig weiß und oben in der Ecke sieht man das Bild!
     // ich will nur das Bild (nicht das weiße drumrum)
     // Wie????
    

    Danke

    Alexander Sulfrian

    [ Dieser Beitrag wurde am 22.06.2003 um 20:58 Uhr von Alexander Sulfrian editiert. ]



  • Setz doch die Groesse von Image2 passend zu rect! 😉



  • Nur blöd wenn ich das z.B. auf dem DC(0) also dem Bildschirm ausgeben will!



  • Stop!
    Geht doch! Wenn ich ein dynamisches Image dazwischen schalte (mit der Größe von rect) und dann den Inhalt diese Images (gestrechtes Bild) irgend wo hin zeichne!

    Danke

    Alexander Sulfrian

    PS. So elegant ist das ja nicht! Vielleicht weiß noch jemand was besseres?



  • Was passiert denn, wenn Du das auf Desktop malst???

    Oder probier mal Copyrect!

    Kein Problem auf Desktop mit WinAPI StretchBlt, BitBlt.



  • Hi,
    hab noch mal meine Lösung überprüft! Meine Lösung geht nur, wenn rect.Left und rect.Top 0 ist! Dann kann ich ja ein Image anpassen und einfach das Bild daraus einem anderen Image zuweisen!

    Das mit dem Desktop war nur ein Beispiel! ich meinte damit, was ich machen soll, wenn ich auf Dinge male von denen ich die Größe nicht verändern kann bzw. will!
    Hintergrung ist das ich eine neue Komponente programmiere! Diese Komponente soll aber ihre Größe nicht verändern!

    Danke

    Alexander Sulfrian



  • Hat keiner eine Idee?
    Noch mal zur Klärung:
    Ich möchte ein TGraphic mit StretchDraw auf ein Canvas eines Images zeichnen! Dabei möchte ich nicht die Größe des Images anpassen! Wie bekomme ich das hin, dass der nichtbelegte Bereich des Images transparent erscheint?

    Danke

    Alexander Sulfrian



  • Image->Transparent=true;//!!!



  • Funktioniert nicht! Trotzdem danke!

    Ich hab noch einen interessanten Effekt erreicht! Wenn ich bevor ich das mit StretchDraw mache, das Image mit FillRect schwarz zeichne bleibt es auch schwarz! Nun meine Frage wie zeichene ich es Transparent bzw. wie lösche ich das Picture aus dem Image!

    Danke

    Alexander Sulfrian



  • Probier mal:

    Image->Picture->Graphic->Assign(0);
    Image->Picture->Bitmap->Width=Image->Width;
    Image->Picture->Bitmap->Height=Image->Height;

    Image->Transparent=true;
    Image->Canvas->StretchDraw(...);
    //oder
    //Image->Picture->Bitmap->Canvas->StretchDraw(...);



  • Hi, funktioniert leider auch nicht!
    Ich schreibe ja, wie schon oben gesagt, eine Komponente! Durch das Assign von 0 teile ich der Kompo mit, dass das Bild gelöscht wird!
    Dies klappt auch! Nur das meine Komponete das Bild selber gezeichnet hat! Dadurch haben diese Funktionen keine Erfolg mehr!
    Ich brauche also eine Funktion die den Inhalt eines Canvas löscht! Also das gezeichnent!

    Danke

    Alexander Sulfrian



  • Das< find ich aber putzig! 😕

    Wenn das in 'nem Image in Form geht, muss das doch auch in 'ner Kompo klappen!

    Mit Assign(0) wird Graphic geloescht.
    Mit ...->Bitmap->Height=... und
    mit ...->Bitmap->Width=...
    wird ein (neues) leeres Bitmap erzwungen.

    Hab' das in ner Form mit 2 Images (ueberlappt) getestet.

    Was (wie) zeichnet Deine Kompo in das Image? Soll das vorher gezeichnete erhalten bleiben?



  • Original erstellt von DerAltenburger:
    Was (wie) zeichnet Deine Kompo in das Image? Soll das vorher gezeichnete erhalten bleiben?

    Hi,
    also meine Komponente ist von TImage abgeleitet! MEINE Kompo zeichnet allerdings ihr Bild selber! D.h. ich greife auf Picture->Graphic zu und zeihen dann das Bild mit StretchDraw(..) auf das Canvas von dem Image (oder der Bitmaps)! Dabei wird allerdings das ganze Image weiß! (mein Problem)

    kurzer Testcode:

    // zwei Images werden benötigt!
     // in Image2 ist eine Grafik geladen
     // das ganze kommt z.B. im ImageClick
     TRect rect(100,100,150,150);
     Image1->Canvas->StretchDraw(rect, Image2->Picture->Graphic);
     // Voila - das Image ist weiß ind das Bild erscheint
    

    Wie bekomme ich nun den weißen Rand weg?
    Was fuscht mir TImage da rein?
    Bei z.B. TPaintBox funktioniert es problemlos!

    Danke

    Alexander Sulfrian



  • Hi Alexander

    Das muss an Deinem BCB liegen! ???

    Ich hab Deinen 2- zeiler mal probiert!
    :
    2x Image in Form
    Image1->AutoSize=false
    Image1->Stretch=false
    in Image2 ein Bild (jpg, bmp oder gif)

    a)
    Image1->Transparent=true
    Image1 vorher LEER !!
    => an Rect- Koord ist Bild2, der Rest bleibt Transparent = Farbe vvon Form!

    b)
    Image1->Transparent=true
    Image1 vorher Bild geladen (BMP!)
    => an Rect- Koord ist Bild2, der Rest bleibt von vorherigem Bild erhalten!

    c)
    Image1->Transparent=false
    Image1 vorher LEER !!
    => an Rect- Koord ist Bild2, der Rest WIRD WEISS!

    d)
    Image1->Transparent=false
    Image1 vorher Bild geladen (BMP!)
    => an Rect- Koord ist Bild2, der Rest WIRD WEISS!

    Das ist doch das was Du erreichen willst?

    PS: Hab BCB 4.0!
    Hast du sowas wie DoubleBuffering ? (an?)

    [ Dieser Beitrag wurde am 24.06.2003 um 20:30 Uhr von DerAltenburger editiert. ]



  • Original erstellt von DerAltenburger:
    Das muss an Deinem BCB liegen! ???
    PS: Hab BCB 4.0!

    Hi,
    langsam glaub ich wirklich das da an meinem PC/BCB liegt! Ich hab auch den BCB4!

    Original erstellt von DerAltenburger:
    2x Image in Form
    Image1->AutoSize=false
    Image1->Stretch=false
    in Image2 ein Bild (jpg, bmp oder gif)

    Ganau so hab ich das auch!

    Original erstellt von DerAltenburger:
    a)=> an Rect- Koord ist Bild2, der Rest bleibt Transparent = Farbe vvon Form!

    Also bei mir wird das Image weiß und nur das Bild wird transparent gezeichnet!

    Original erstellt von DerAltenburger:
    b)=> an Rect- Koord ist Bild2, der Rest bleibt von vorherigem Bild erhalten!

    DAS FUNKTIONIERT BEI MIR AUCH!!! (Juhu!)

    Original erstellt von DerAltenburger:
    c)=> an Rect- Koord ist Bild2, der Rest WIRD WEISS!

    Also bei mir wird das Image weiß und nur das Bild wird normal gezeichnet!

    Original erstellt von DerAltenburger:
    d)=> an Rect- Koord ist Bild2, der Rest WIRD WEISS!

    Bei mir wird das Bild nicht überdeckt! Es wird so wie bei b nur das das geladene Bild nicht transparent ist!

    Eigenartig!!!!
    Eigentlich wollte ich a und b erreichen! Naja die Hälfte funktioniert ja schon!

    MFG

    Alexander Sulfrian

    PS: Hast du irgendwelche Patches installiert?

    [ Dieser Beitrag wurde am 24.06.2003 um 20:58 Uhr von Alexander Sulfrian editiert. ]



  • Neeeee, Patches hab' ich keine!

    ********** FEHLER*******
    Bei d) hab' ich 'n Fehler gemacht: Der Rest wird nicht weiss! (altes Bild bleibt!) 🕶
    a) bis c) waren richtig beschrieben!

    Kannst Du mir die .h und .cpp Datei der Form mailen? Dann kann ich das auf meinem BCB mal probieren!

    PS: Vielleicht kann man die Transparente Farbe einstellen fuer das Bitmap - Scheint bei mir das WEISS zu sein?



  • Hi,
    hab's mal auf Webspace hochgeladen:
    http://www.sulfrian.de.vu/download/ImageTest.exe (SFX)

    oder
    http://www.sulfrian.de.vu/download/ImageTest.zip (ZIP)

    Einfach runterladen und entpacken! Dann ist da das ganze Projekt mit BSP-Bildern drinne!

    Die Hintergrund ist so beabsichtig damit man die transparenten Bereiche sieht!

    Danke für deine Bemühungen!

    Alexander Sulfrian

    [edit] Hab noch 2 Screenshots hochgeladen:
    vor dem zeichen: http://www.sulfrian.de.vu/download/vorher.JPG
    und nach dem zeichen: http://www.sulfrian.de.vu/download/danach.JPG

    Und noch als Anmerkung:
    Die beiden Bilder in den unteren Images sind gleich!
    Nur Transparent an bzw. aus![/edit]

    [ Dieser Beitrag wurde am 24.06.2003 um 23:38 Uhr von Alexander Sulfrian editiert. ]



  • Hi Alexander

    Das Problem scheint von Deinem BS (WinXP) zu kommen!

    Bei mir (Win2K) kommen die Bilder wie ichs beschrieben habe! ???

    *************************************
    Lösung:

    mach NACH ...StretchDraw(...)

    Image1->Picture->Bitmap->TransparentColor=clWhite!!! 😉

    In Deinem Images sind ist die transparente Farbe falsch vorgegeben.

    PS: Farbwert muss auf demselben stehen wie transparente Bereiche gefärbt sind!
    Der Wert kann von Systemeinstellungen abhaengen?

    Ich mail Dir mal 'n Screenshot

    [ Dieser Beitrag wurde am 25.06.2003 um 14:06 Uhr von DerAltenburger editiert. ]



  • Original erstellt von DerAltenburger:
    Lösung:
    mach NACH ...StretchDraw(...)
    Image1->Picture->Bitmap->TransparentColor=clWhite!!! 😉
    In Deinem Images sind ist die transparente Farbe falsch vorgegeben.

    Hi,
    ja das scheint tatsächlich an WinXP zu liegen, aber auch die manuelle Ziweisung der Farbe bringt nichts!

    Ich wärd's noch mal unter WinME probieren! (zur Sicherstellung ob's wirklich an meinem XP liegt)

    Danke

    Alexander Sulfrian



  • Noch ne Idee:

    Image1->Picture->Bitmap->TransparentColor=Image1->Picture->Bitmap->Canvas->Pixels[0][0];

    !!! Setzt Transparente Farbe auf Pixel links oben !!! - das ist Dein 'weisser Rand.


Anmelden zum Antworten