Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Canvas: Wie Formen kombinieren? (https://www.delphipraxis.net/155708-canvas-wie-formen-kombinieren.html)

BlueStarHH 4. Nov 2010 13:39


Canvas: Wie Formen kombinieren?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe Bildobjekt und ein TCanvas. Ich möchte dort mit dem Canvas nun ein Rechteck aufmalen, das durch einen Kreis ausgefüllt wird. Der Bereich im Rechteck, den der Kreis abdeckt soll transparent sein. Alle anderen Bereich im Rechteck sollen mit dem Brush des Rechtecks gefüllt werden. Im Anhang die rote Fläche. Transparent heißt, der Inhalt vom Bildobjekt soll dort durchscheinen. Es muss wirklich irgendwie transparent gezeichnet werden. Sich eine Kopie vom Bildobjekt zu holen und die dann am Ende drübermalen geht nicht. Wer hat eine Idee?

DeddyH 4. Nov 2010 14:27

AW: Canvas: Wie Formen kombinieren?
 
Ich bin nicht zu 100% sicher, aber ich glaube, mit Regions ist das zu machen.

himitsu 4. Nov 2010 14:41

AW: Canvas: Wie Formen kombinieren?
 
Also die Regions sind schon der richtige Weg

Und alternativ kann man das Ganze auch erstmal auf ein temporäres Bild zeichnen und dann komplett rüberkoperen.
- Rechteck zeichnen (komplett ausgefüllt)
- Kreis zeichnen (mit mit einer farbe füllen, welche man als Transparent definiert)
- dann alles ins Zielbild einfügen und dabei die gewünschte Farbe als Transparent deklarieren, so daß diese nicht mitkopiert wird.

Bummi 4. Nov 2010 16:30

AW: Canvas: Wie Formen kombinieren?
 
unter http://www.progdigy.com/ findest Du die GDI plus API, Free und ohne Installation verwendbar, einige brauchbare Demos sind enthalten.

DeddyH 4. Nov 2010 17:54

AW: Canvas: Wie Formen kombinieren?
 
Regions funktionieren auch ohne GDI+, sie sehen dann nur nicht so hübsch aus ;)

BlueStarHH 5. Nov 2010 07:46

AW: Canvas: Wie Formen kombinieren?
 
Ich habs jetzt mit einer Paintbox und 2 Regionen probiert (Kreis+Rechteck), die kombiniert werden. Leider verändert das gar nichts an der Ausgabe. D.h. der Kreisausschnitt ist nicht transparent sondern deckt mit dem Brush alles ab. Wo liegt der Fehler:

Delphi-Quellcode:
var
  r: TRect;
  RgnR, RgnK: HRgn;
begin
  r.Left := 10;
  r.top := 20;
  r.Right := 50;
  r.Bottom := 60;

  RgnR := CreateRectRgn(r.Left, r.top, r.Right, r.Bottom);
  RgnK := CreateEllipticRgn(r.Left, r.top, r.Right, r.Bottom);

  CombineRgn(RgnR, RgnR, RgnK, RGN_DIFF);
  SetWindowRgn(PaintBox.Canvas.Handle, RgnR, True);

  PaintBox.Canvas.Rectangle(0, 0, PaintBox.Width, PaintBox.Height);

  PaintBox.Canvas.brush.Color := clRed;
  PaintBox.Canvas.Rectangle(r);

  PaintBox.Canvas.brush.Color := clYellow;
  PaintBox.Canvas.Ellipse(r);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.

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