StretchDraw - und das ganze Canvas ist weiß?
-
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.JPGUnd 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.
-
Hi,
das von dir funktioniert auch nicht!
ABER ICH HABE EINE LÖSUNG:
wenn ich bevor ich das Bild mit StretchDraw zeichne mit dem folgenden Code, die Zeichenfläche weiß male, bekomme ich das gewünschte Ergebnis (bei Transparent = true):Image1->Canvas->Brush->Color = clWhite; Image1->Canvas->FillRect(TRect(0, 0, Image1->Width, Image1->Height)); Image1->Canvas->StretchDraw....
Dies funktioniert! Weiß zwar nicht warum er es vorher nicht gemacht hat, aber ich könnte mir vorstellen, dass es daran liegt, dass durch das zeichen schon ein TBitmap erstellt wurde und dass WinXP beim Erzeugen mit StretchDraw einen Fehlern macht!
Ich bedanke mich bei DerAltenburger, der mir geholfen hat die Lösung zu finden!
MFG
Alexander Sulfrian
-
Freut mich, wenn ich helfen konnte.
Komisch nur, dass Dein Code bei mir auch ohne den Trick funzt? Alo ich bleib bei Win2K!!!
Soll Dein Hintergrund konstannt bleiben? Dann ginge ev. auch sowas:
Hintergrund in TBitmap (offscreen) speichern
'neue Graphic' uber den Hintergrund malen - in weiteres TBitmap2
TBitmap2 in TImage kopieren!
(oder TBitmap2 in OnPaint in Form drawen!)Ups, dann koenteste den Hintergrund in TBitmap auch austauschen.
PS: Hab' ne Komponente zum Drucken von Graphiken, mit Vorschau. Bist Du interessiert die zu testen - auf Deinem XP? Ist ne Laufzeitkompo - .BPL,.BPI,.OBJ,.LIB und .H- dateien.
Die braucht aber JPG- und GifImage- Bibliotheken! Fuer NUR BMP koennte ich die anpassen.Bei Interesse anmailen!