Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Transparenz-Farbe von TImage ändern (https://www.delphipraxis.net/215042-transparenz-farbe-von-timage-aendern.html)

Kevinpptx 27. Apr 2024 12:12

Transparenz-Farbe von TImage ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich versuche in Delphi dieses (ich konnte es hier nicht hochladen, weil es zu groß war) Bitmap-Bild als Bild eines TImage einzufügen. Damit die Farbe rot transparent wird, war mein Ansatz so:

Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
var b : TBitmap;
begin
  b := TBitmap.Create();
  b.LoadFromFile('Koenig_weiss.bmp');
  b.Transparent := true;
  b.TransparentColor := clRed;
  Image1.Picture.Graphic := b;
end;
Allerdings wird dann nur noch rot angezeigt, was suggeriert, dass die transparente Farbe noch immer weiß ist:

Anhang 56805


Kann mir irgendjemand sagen, was ich falsch mache?

Danke im Voraus :)

Delphi.Narium 27. Apr 2024 13:35

AW: Transparenz-Farbe von TImage ändern
 
Transparentcolor rot wird bei dem Bild nicht funktionieren, weil in dem Bild nichts rot (= clRed) ist, die überwiegend vorkommende Farbe ist $005334FE.

Kevinpptx 27. Apr 2024 13:52

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1536175)
Transparentcolor rot wird bei dem Bild nicht funktionieren, weil in dem Bild nichts rot (= clRed) ist, die überwiegend vorkommende Farbe ist $005334FE.

Ich habe den Code-Teil abgeändert.

Delphi-Quellcode:
b.TransparentColor := $005334FE;
Leider bleibt das Ergebnis unverändert.

Uwe Raabe 27. Apr 2024 14:19

AW: Transparenz-Farbe von TImage ändern
 
Das Bitmap ist erstmal zu groß für das TImage, was man entweder durch setzen von Stretch := True oder AutoSize := True lösen kann;

Weiterhin sollte das TImage ebenfalls ein Transparent := True bekommen. Die TBitmap.TransparentXXX Eigenschaften wirken sich nur auf das Zeichnen aus, nicht auf den Inhalt der Bitmap.

Kevinpptx 27. Apr 2024 14:27

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1536178)
Das Bitmap ist erstmal zu groß für das TImage, was man entweder durch setzen von Stretch := True oder AutoSize := True lösen kann;

Weiterhin sollte das TImage ebenfalls ein Transparent := True bekommen. Die TBitmap.TransparentXXX Eigenschaften wirken sich nur auf das Zeichnen aus, nicht auf den Inhalt der Bitmap.

Vielen Dank! Jetzt funktioniert es :)

himitsu 27. Apr 2024 15:15

AW: Transparenz-Farbe von TImage ändern
 
Wobei dort das Tansparent vom Bitmap nicht über eine Farbe, sondern durch ein Pixel (die Farbe des einen Eck-Pixels) bestimmt wird.
Delphi-Referenz durchsuchenTImage.Transparent

Muß es denn auch unbedingt ein Bitmap sein?
z.B. PNG oder etwas aus der Familie Vector-Grafiken

oder
https://en.wikipedia.org/wiki/Chess_symbols_in_Unicode
https://www.unicode.org/charts/PDF/U1FA00.pdf
https://www.delphipraxis.net/214866-...und-fonts.html

Uwe Raabe 27. Apr 2024 15:37

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von himitsu (Beitrag 1536182)
Wobei dort das Tansparent vom Bitmap nicht über eine Farbe, sondern durch ein Pixel (die Farbe des einen Eck-Pixels) bestimmt wird.

Das gilt nur wenn TBitmap.TransparentMode auf tmAuto steht. Andernfalls werden die Einstellungen in TBitmap schon mit in das Image übernommen. Das kann man leicht sehen, wenn an die TransparentColor des Bitmaps falsch einstellt.

Lediglich das Transparent von TImage überschreibt das Transparent der TBitmap bei der Zuweisung auf Picture.Graphic. Deswegen muss das beim Control passend gesetzt sein.

Kevinpptx 27. Apr 2024 17:42

AW: Transparenz-Farbe von TImage ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Uwe Raabe (Beitrag 1536178)
Das Bitmap ist erstmal zu groß für das TImage, was man entweder durch setzen von Stretch := True oder AutoSize := True lösen kann;

Weiterhin sollte das TImage ebenfalls ein Transparent := True bekommen. Die TBitmap.TransparentXXX Eigenschaften wirken sich nur auf das Zeichnen aus, nicht auf den Inhalt der Bitmap.

Jetzt bin ich endgültig verwirrt. Ich habe Delphi neu gestartet und jetzt funktioniert es nicht mehr. Ausgabe:
Anhang 56806 (zumindest sieht man den König diesmal)

Es hatte doch grad noch funktioniert :/

Ich hab den Code zum Testen etwas abgeändert. Siehe:
Delphi-Quellcode:
procedure TForm1.Image1Click(Sender: TObject);
var b : TBitmap;
    pxc: TColor;
    hxc : string;
begin
  b := TBitmap.Create();
  b.LoadFromFile('Koenig_weiss.bmp');
  b.TransparentColor := $FE5334;
  b.Transparent := true;
  Image1.Picture.Graphic := b;

  // folgendes wird nicht ausgeführt, was keinen Sinn ergibt, da....
  if (Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $FE5334) then ShowMessage('toll');


  pxc := Image1.Picture.Bitmap.Canvas.Pixels[0, 0];
  hxc := IntToHex(ColorToRGB(pxc), 6);
  ShowMessage(hxc);
  // ...das hier #5334FE (hex) zurückgibt, was ja $FE5334 (delphi) ist
end;
Hättet ihr vielleicht noch eine Idee? :(
(Und ja, ich muss eine Bitmap verwenden)
(Beim Image ist stretched true und Transparent true)

Uwe Raabe 27. Apr 2024 18:02

AW: Transparenz-Farbe von TImage ändern
 
Was bringt dich denn auf diese Idee?
Zitat:

// ...das hier #5334FE (hex) zurückgibt, was ja $FE5334 (delphi) ist
Hier mal die Implementierung:
Delphi-Quellcode:
function ColorToRGB(Color: TColor): Longint;
begin
  if Color < 0 then
    Result := GetSysColor(Color and $000000FF) else
    Result := Color;
end;

Kevinpptx 27. Apr 2024 19:07

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1536185)
Was bringt dich denn auf diese Idee?
Zitat:

// ...das hier #5334FE (hex) zurückgibt, was ja $FE5334 (delphi) ist
Hier mal die Implementierung:
Delphi-Quellcode:
function ColorToRGB(Color: TColor): Longint;
begin
  if Color < 0 then
    Result := GetSysColor(Color and $000000FF) else
    Result := Color;
end;

Ich war unter der Auffassung. Auf jeden Fall funktioniert es ja nicht. Nicht mit $FE5334 und nicht mit $5334FE, was auch immer richtig ist. Obwohl es ja zu 100% diese Farbe ist. Vorher hat es ja auch funktioniert, ich habe nichts geändert. Jetzt nicht mehr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.
Seite 1 von 4  1 23     Letzte »    

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 by Thomas Breitkreuz