Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Kreis im transparenten TImage zeichnen (https://www.delphipraxis.net/212098-kreis-im-transparenten-timage-zeichnen.html)

DieFliege 17. Dez 2022 11:42

Kreis im transparenten TImage zeichnen
 
Hallo zusammen,

ich habe gerade einen Deckfehler oder ein Brett vorm Kopf:

In meinem Tool verwende ich 2x TImage
1x TImage, in dem ein Bild vorhanden ist
1x TImage, in dem ich 2 Kreise zeichnen möchte

Die beiden TImage liegen übereinander, dabei soll der gezeichnete Kreis über dem Bild (TImage1) erscheinen. Das Zeichnen des Kreises ist auch kein Problem, jedoch soll der Rest transparent sein, sodass das Bild im Hintergrund zu erkennen ist.

Irgendwo habe ich einen Denkfehler drin und sollte ich ein Thema im Forum übersehen haben, das mein Problem lösen könnte, bitte ich um Entschuldigung.

Über etwas Hilfe wäre ich dankbar.

LG DieFliege


Delphi-Quellcode:
image2.Canvas.Pen.Color  := clRed;
image2.Canvas.Pen.Width  := 3;
image2.Canvas.Brush.Style := bsClear;
image2.Canvas.Ellipse(100, 100, 300, 300);

himitsu 17. Dez 2022 12:17

AW: Kreis im transparenten TImage zeichnen
 
Und was ist nun das Problem?

DieFliege 17. Dez 2022 12:21

AW: Kreis im transparenten TImage zeichnen
 
Hallo Himitsu,

Zitat:

"... jedoch soll der Rest transparent sein, sodass das Bild im Hintergrund zu erkennen ist."
Das ist das Problem, der Hintergrund ist nicht transparent :-(

LG DieFliege

himitsu 17. Dez 2022 12:31

AW: Kreis im transparenten TImage zeichnen
 
Na dann. :angle:

Nunja, original ist das "Bild" garnicht transparent.
Das sieht nur so aus, weil garkein Bild geladen und somit nichts gemalt wird.


Du hast nicht zufällig vergessen die Transparenz im TImage zu aktivieren?


Und was für eine Graphic-Instanz/Typ ist geladen?

Wenn Bitmap ... Du weißt auch wie beim Bitmap das mit der Transparenz funktioniert?
Ich meine nicht die TransparentColor, sondern tmAuto.

DieFliege 17. Dez 2022 12:52

AW: Kreis im transparenten TImage zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo himitsu,

Die Eigenschaft "Transparent" für das TImage habe ich gesetzt, jedoch habe ich immer noch den weißen Rahmen - Siehe Screenshot.

Zitat:

Und was für eine Graphic-Instanz/Typ ist geladen?
Hier habe ich keine geladen, versuche es aber nun mal mit Bitmap.

LG DieFliege

DieFliege 17. Dez 2022 13:40

AW: Kreis im transparenten TImage zeichnen
 
Hey,

ich habe es nun so gelöst:

Delphi-Quellcode:
procedure TForm1.btn_BildClick(Sender: TObject);
var
  MeinBild : TBitmap;

begin
  //--
  MeinBild := TBitmap.Create;
  MeinBild.LoadFromFile('meinbild.bmp');
  MeinBild.Canvas.Pen.Color := clRed;
  MeinBild.Canvas.Pen.Width  := 3;
  MeinBild.Canvas.Brush.Style := bsClear;
  MeinBild.Canvas.Ellipse(100, 100, 300, 300);
  Image2.Picture.Bitmap.Assign(MeinBild);
end;
Danke an himitsu für den Denkanstoß zu Bitmap :-)

LG DieFliege

himitsu 17. Dez 2022 14:16

AW: Kreis im transparenten TImage zeichnen
 
Zitat:

Zitat von DieFliege (Beitrag 1516364)
Hier habe ich keine geladen,

Zitat:

Zitat von DieFliege (Beitrag 1516359)
Delphi-Quellcode:
image2.Canvas.Pen.Color  := clRed;
image2.Canvas.Pen.Width  := 3;
image2.Canvas.Brush.Style := bsClear;
image2.Canvas.Ellipse(100, 100, 300, 300);

Ahhhh, jetzt seh ich es.
Du hast auf/über das TImage gemalt, nicht in das Image, also in die "angezeigte" Graphic ... sowas macht man nicht.
Dort gibt es keine Transparenz. (transparent ist das, bzw. den Hintergrund sieht man nur dort, wo du niemals etwas übermalt hattest)


So hättest du auch gleich eine TPaintBox nehmen können
und sobald durch irgendwass das "Image" oder die Hintergrundkomponenten neu gezeichnet werden (z.B. minimiern/maximieren des Fensters oder einfach mal kurz das Fenster aus dem sichtbaren Berech verschieben und früher (vor dem DWM) auch wenn irgendwas, wie ein anderes Fenster, vor/über deinem Fenster lag) muß der Kreis im OnPaint auch immer wieder neu von dir gemalt werden.

Du wolltest eigentlich
Delphi-Quellcode:
Image2.Picture.Graphic.Canvas

bzw.
Delphi-Quellcode:
Image2.Picture.Bitmap.Canvas

(nicht
Delphi-Quellcode:
Image2.Canvas
)

Beim Zugriff auf Image2.Picture.Bitmap wird in Graphic ein TBitmap erstellt, wenn es noch Keines gibt, so groß wie das TImage aktuell ist.

also
Delphi-Quellcode:
Image2.Picture.Bitmap.Canvas.Ellipse(100, 100, 300, 300);


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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