![]() |
Abgerundete Ecken
Hallo zusammen,
ich lade mit einem TImage-Objekt ein Bild und stelle das auf der Oberfläche dar. Hierzu möchte ich dieses Objekt mit definierbaren abgerundeten Ecken darstellen. Es ist sowas wie das Canvas.RoundRect(). Aber wenn ich diese Funktion anschließend anwende, dann wird ein weißes Rechteck mit abgerundeten Ecken auf mein geladenes Bild gezeichnet. Ich möchte aber, dass das Bild selbst die abgerundeten Ecken hat. Hoffe ihr könnt mir helfen. Gruß, Moony |
Re: Abgerundete Ecken
ein Bitmap mit dem Bild
ein Bitmap mit einem weißen roundRect und weiß gefüllt, der Rest schwarz beide Bitmap and verknüpfen und ausgeben |
Re: Abgerundete Ecken
Irgendwie verstehe ich nciht ganz wie ich die beiden verknüpfen soll? Könntest du mir da ein wenig Code hinschreiben?
|
Re: Abgerundete Ecken
Delphi-Quellcode:
Sollte so gehen.
BitBlt(MaskBitmap.Canvas.Handle, 0, 0, MaskBitmap.Width, MaskBitmap.Height, DeineBitmap.Canvas.Handle, 0, 0, SRCAND);
|
Re: Abgerundete Ecken
Die beiden TImage-Objekte werden zwar jetzt verbunden, aber die Ecken des eigentlichen Bildes sind noch da. Ich möchte auch keinen schwarzen Rand haben, sondern lediglich bei dem Bild das ich lade die Ecken rund zeichnen mit einem bestimmten Radius.
|
Re: Abgerundete Ecken
|
Re: Abgerundete Ecken
Liste der Anhänge anzeigen (Anzahl: 1)
Erst mal Sorry, dass ich hier so lange keine Antwort gegeben habe.
Also irgendwie will das bei mir nicht funktionieren mit den runden Ecken. Ich stelle mal den Code hier rein, damit ihr euch ein Bild davon machen könnt, was ich meine. Also, ich habe ein Bild geladen, welches auf die vorgesehene Größe des Images geladen wird. In dem Eingabefeld darunter wird der Radius der runden Ecken in Pixel angegeben. Danach muß auf "Round" geklickt werden. Wie ihr seht, werden folgende Punkte gemacht: 1. Der schwarze Rand ist da. Diesen möchte ich nicht haben. 2. Das Bild wird auf seine ursprüngliche Größe in das Image geladen. 3. Die Ecken des Bildes sind nicht rund. Ich hoffe ihr wißt eine Lösung, denn ich verzeweifle hier ein wenig. :wall: Gruß & Danke, Moony |
Re: Abgerundete Ecken
Hallo zusammen,
weißt denn keiner eine Antwort auf mein Problem??? :cry: Gruß, Moony |
Re: Abgerundete Ecken
ich habe
![]() du musst im Prizip genau das Gleiche machen :) nur halt mit roundRect statt ellipse HTH Frank |
Re: Abgerundete Ecken
Hallo,
ich habe das jetzt so gemacht:
Delphi-Quellcode:
Leider wird hier nur das Bild reingezeichnet ohne jegliche runde Ecken.
procedure DoItRound;
var bmp_mask, bmp_tmp : TBitmap; const cl_trans_tmp = clWhite; cl_trans = clFuchsia; begin bmp_mask := TBitmap.create; bmp_tmp := TBitmap.create; try //load bitmap bmp_tmp.Assign(Form1.image1.picture.bitmap); //resize mask bmp_mask.width := bmp_tmp.width; bmp_mask.height := bmp_tmp.height; //create the mask; bmp_mask.canvas.brush.color := cl_trans; bmp_mask.canvas.Pen.color := cl_trans; bmp_mask.Canvas.FillRect(rect(0,0,bmp_mask.width,bmp_mask.height)); bmp_mask.canvas.brush.color := cl_trans_tmp; bmp_mask.canvas.Pen.color := cl_trans_tmp; bmp_mask.canvas.RoundRect(0,0,bmp_mask.width,bmp_mask.height, 10,10); bmp_mask.TransparentColor := cl_trans_tmp; bmp_mask.Transparent := true; //merging the mask with original bitmap bmp_tmp.Canvas.Draw(0,0,bmp_mask); bmp_tmp.TransparentColor := cl_trans; bmp_tmp.Transparent := true; //Draw masked bitmap Form1.Image2.canvas.draw(0,0,bmp_tmp); finally //free Objects bmp_tmp.free; bmp_mask.free; end; end; Zeichne ich das Ganze anstatt auf das Image2 auf mein Canvas der Form1, dann funktioniert das. In meinem Programm zeichne ich aber auf das Canvas eines Imageobjektes und nicht auf das Canvas der Form. Gruß, Moony |
Re: Abgerundete Ecken
ich hab das nochmal mit dinem Code probiert und festgestellt, dass der definierte bereich ggf. nur andersfarbig gemalt wird und deshalb nicht transparent. Ursache dafür war bei meinen Tests die Farbtiefe...
wenn ich bei der initialisierung (vor dem erstellen der Maske) die Farbtiefe beider bitmaps auf 24bit stelle funktioniert es bei mir.
Delphi-Quellcode:
HTH Frank
bmp_mask.PixelFormat:=pf24Bit;
bmp_tmp.PixelFormat:=pf24Bit; |
Re: Abgerundete Ecken
Liste der Anhänge anzeigen (Anzahl: 1)
hmm, also hier passiert immer noch das gleiche, nämlich nichts. Egal wie und wo ich das Pixelformat setze, wird mein Bild nicht mit runden Ecken angezeigt.
Ich stelle mal mein Testprojekt diesbezüglich hier rein. Im Programm auf den "Do It Round" - Button klicken. |
Re: Abgerundete Ecken
bei mir funktioniert das... (gesteted mit zapotek.bmp aus windows-verzeichnis und 20er Rundung)
Delphi-Quellcode:
was mir auffällt..du hantierst mit image.canvas rum...evtl solltest du die procedure DoItRound auch auf das Canvas ausbauen...auch damit jpegs und andere grafiken unterstützt werden.
//resize mask
bmp_mask.pixelformat := pf24bit; bmp_tmp.pixelformat := pf24bit; bmp_mask.width := bmp_tmp.width; bmp_mask.height := bmp_tmp.height; weiterhin würde ich die DoItRound so umbauen, dass du rundung,quell und zielcanvas übergibst, damit es unabhängig von dem Formular ist, sowie die prüfungen auf nil (assigned) in die procedure verlagern. HTH Frank |
Re: Abgerundete Ecken
Es hat sich rausgestellt, dass es wohl an meinem Bitmap lag. Warum auch immer es bei diesem nicht funktioniert...
Zitat:
Zitat:
Somit wird auch auf andere Formate und auf nicht Vorhandensein eines Bildes überprüft. Eine Frage wirft sich jetzt in dieser Situation noch auf: Die Bilder werden in ihrer Originalgröße gezeichnet, obwohl von dem Image-Objekt der Wert Strtch bzw. Autosize gesetzt sind. Woran liegt das? |
Re: Abgerundete Ecken
Zitat:
width,height => Image.width/height bitblt(image.canvas,0,0,width,height,bmp.canvas,0, 0,srcCopy); Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz