Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Abgerundete Ecken (https://www.delphipraxis.net/108923-abgerundete-ecken.html)

Moony 21. Feb 2008 09:41


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

Kroko1999 21. Feb 2008 09:49

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

Moony 21. Feb 2008 10:11

Re: Abgerundete Ecken
 
Irgendwie verstehe ich nciht ganz wie ich die beiden verknüpfen soll? Könntest du mir da ein wenig Code hinschreiben?

DeddyH 21. Feb 2008 10:15

Re: Abgerundete Ecken
 
Delphi-Quellcode:
BitBlt(MaskBitmap.Canvas.Handle, 0, 0, MaskBitmap.Width, MaskBitmap.Height, DeineBitmap.Canvas.Handle, 0, 0, SRCAND);
Sollte so gehen.

Moony 21. Feb 2008 10:31

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.

DeddyH 21. Feb 2008 10:58

Re: Abgerundete Ecken
 
http://www.ucancode.net/faq/Draw_Transparent_bitmap.htm

Moony 28. Feb 2008 11:35

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

Moony 29. Apr 2008 13:54

Re: Abgerundete Ecken
 
Hallo zusammen,

weißt denn keiner eine Antwort auf mein Problem??? :cry:

Gruß, Moony

_frank_ 29. Apr 2008 18:18

Re: Abgerundete Ecken
 
ich habe hier mal ein bild mit einer selbstgemalten maske umgeformt..
du musst im Prizip genau das Gleiche machen :) nur halt mit roundRect statt ellipse

HTH Frank

Moony 5. Mai 2008 09:36

Re: Abgerundete Ecken
 
Hallo,

ich habe das jetzt so gemacht:

Delphi-Quellcode:
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;
Leider wird hier nur das Bild reingezeichnet ohne jegliche runde Ecken.
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz