AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kreis im transparenten TImage zeichnen

Ein Thema von DieFliege · begonnen am 17. Dez 2022 · letzter Beitrag vom 17. Dez 2022
Antwort Antwort
DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#1

Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 11:42
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);

Geändert von DieFliege (17. Dez 2022 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 12:17
Und was ist nun das Problem?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#3

AW: Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 12:21
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 12:31
Na dann.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#5

AW: Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 12:52
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
Miniaturansicht angehängter Grafiken
transparenz.jpg  

Geändert von DieFliege (17. Dez 2022 um 13:13 Uhr)
  Mit Zitat antworten Zitat
DieFliege

Registriert seit: 6. Aug 2013
54 Beiträge
 
Delphi XE4 Professional
 
#6

AW: Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 13:40
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#7

AW: Kreis im transparenten TImage zeichnen

  Alt 17. Dez 2022, 14:16
Hier habe ich keine geladen,
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
Image2.Picture.Graphic.Canvas
bzw.
Image2.Picture.Bitmap.Canvas
(nicht 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 Image2.Picture.Bitmap.Canvas.Ellipse(100, 100, 300, 300);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2022 um 14:21 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 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