Delphi-PRAXiS

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 11: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 12: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 12: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 13: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 13: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 14: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 14: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 16: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 17: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 18: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.

Delphi.Narium 27. Apr 2024 18:25

AW: Transparenz-Farbe von TImage ändern
 
Da das Bild 'nen grauen Rand hat, kann Image1.Picture.Bitmap.Canvas.Pixels[0, 0] weder $5334FE noch $FE5334 sein. Die Randfarbe ist $F0F0F0 und damit ist auch Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $F0F0F0.

Kevinpptx 27. Apr 2024 19:24

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1536187)
Da das Bild 'nen grauen Rand hat, kann Image1.Picture.Bitmap.Canvas.Pixels[0, 0] weder #5334FE noch $FE5334 sein. Die Randfarbe ist $F0F0F0 und damit ist auch Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $F0F0F0.

Der graue Rand ist nur vom Screenshot. Das Quellbild ist ganz oben in meiner Frage verlinkt.

Delphi.Narium 27. Apr 2024 19:52

AW: Transparenz-Farbe von TImage ändern
 
Das oben verlinke Bild hat aber auch keinen durchgehenden Rand in $005334FE, sondern 'nen kleinen schwarzen Block und 'nen recht großen weißen Balken. Wenn mich nicht alles täuscht, dürfte Pixels[0, 0] = $FFFFFF sein.

Dashier
Delphi-Quellcode:
b.TransparentColor := $FE5334;
verstehe ich nicht. Wenn ich bei meinem Delphi bei irgendeiner Komponenten als Farbe $FE5334 vergebe, wird's blau, bei $5334FE erhalte ich jedoch ein rotes Bild, so wie in der verlinkten Datei.

Frag' doch mal den Debugger, welchen Wert
Delphi-Quellcode:
Image1.Picture.Bitmap.Canvas.Pixels[0, 0]
hat, dann kannst Du sehen, welcher Wert hier vergeben wurde und warum eine Abfraqge auf $FE5334 bzw. $5334FE scheitert.

Wenn's mit dem Debugger nicht geht dann halt einfach mal ein
Delphi-Quellcode:
ShowMessage(IntToHex(Image1.Picture.Bitmap.Canvas.Pixels[0, 0]));

TomyN 27. Apr 2024 20:22

AW: Transparenz-Farbe von TImage ändern
 
Dreh mal die Sequenz um, d.h. lade erst die Bitmap und setze dann die Transparenzparameter

himitsu 27. Apr 2024 21:14

AW: Transparenz-Farbe von TImage ändern
 
Im Hex-Integer wird logisch wie bei Dezimal gezählt, also Links ist das MSB, also die größte Ziffer/Byte,
während dieser HTML-Color-Code links das erste/kleinste Byte hat, also wie im Atbeitsspeicher.
BigEndian und LittleEndian

Drum sind hier die RGB gedreht.
$ABGR vs. #RGB

Uwe Raabe 27. Apr 2024 21:15

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536186)
Auf jeden Fall funktioniert es ja nicht. Nicht mit $FE5334 und nicht mit $5334FE, was auch immer richtig ist.

Hier funktioniert es. Dies ist mein Code:
Delphi-Quellcode:
var b : TBitmap;
    pxc: TColor;
    hxc : string;
begin
  b := TBitmap.Create();
  try
    b.Transparent := true;
    b.TransparentColor := $005334FE;
    b.LoadFromFile('c:\Users\Uwe\Downloads\Koenig_weiss.bmp');
    Image1.Picture.Graphic := b;
    Image1.Transparent := True;
    if (Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $5334FE) then ShowMessage('toll'); // kommt!


    pxc := Image1.Picture.Bitmap.Canvas.Pixels[0, 0];
    hxc := IntToHex(ColorToRGB(pxc), 6);
    ShowMessage(hxc); // zeigt 5334FE
  finally
    b.Free;
  end;
end;

himitsu 27. Apr 2024 21:26

AW: Transparenz-Farbe von TImage ändern
 
Delphi-Quellcode:
var
  C: TColor;
  S, S2: string;
begin
  C := clWebSeaGreen;
  S := IntToHex(C, 6);

  SetLength(S2, 6);
  BinToHex(@C, PChar(S2), 3);

  ShowMessage('$' + S + ' = #' + S2);
end;
$578B2E = #2E8B57

Michael II 27. Apr 2024 22:36

AW: Transparenz-Farbe von TImage ändern
 
Du hast nach dem Weg gefragt. himitsu stand an der Gabelung #6 und gab dir den Tipp: "Rechts abbiegen und in Richtung PNGImage weiter fahren." Mein Tipp: Fahr zurück zur Kreuzung #6 und...

Konvertiere mit einem Malprogramm (oder online) deine BMP in eine PNG mit Transparenz.

Lade deine PNG ins Image und fertig.

Michael II 28. Apr 2024 00:40

AW: Transparenz-Farbe von TImage ändern
 
himitsu hat in #6 Links auf Schachfiguren in Unicode Zeichensätzen gepostet (es gibt viele, auch um einen WInkel w gedrehte).

Hier unten ein Beispiel, wie du alle 10 Schachfiguren eines Unicodezeichensatzes je als PNG abspeichern kannst.

Alternativ zum Speichern in PNGs könntest du die Bitmaps in eine Imagelist schreiben und hättest dann via diese Liste einfachen Zugriff auf die Bilder (Addmasked).

Delphi-Quellcode:
uses PNGImage;

procedure TForm108.Button1Click(Sender: TObject);
var figur, b : TBitMap;
    pngfigur : TPNGImage;
    cs : unicodestring;
    hl, br, ho, i : integer;
    te : TSize;
begin
  for i := $2654 to $265f do cs := cs + widechar(i);
  b := TBitMap.Create;
  figur := TBitMap.Create;
  pngfigur := TPNGImage.Create;
 try
  br := 200; // breite einer schachfigur grafik
  ho := 200; // hölhe

  b.SetSize( 10*br, ho ); // bitmap, in welche wir alle 10 figuren schreiben werden
  b.Canvas.Font.Name := 'Segoe UI Symbol1'; // eine unicode fähige schrift wählen
  // Arial Unicode MS1, Code20001, DejaVu Sans1, DejaVu Sans Mono1, Segoe UI Symbol1, Symbola1, Unifont1
  b.Canvas.Font.Height := b.Height; // schrifthöhe
  b.Canvas.Font.Color := clblack; // farbe der schrift

  hl := 0;
  // figuren zeichnen
  for i := 1 to 10 do
  begin
    te := b.Canvas.TextExtent(cs[i]);
    b.Canvas.TextOut(hl+(br-te.cx) div 2, (ho-te.cy) div 2, cs[i] );
    inc(hl,br);
  end;
  // umgebung der figuren rot einfärben bis zur randfarbe der figuren
  b.Canvas.Brush.Color := clred;
  b.Canvas.Brush.Style := bsSolid;
  b.Canvas.FloodFill(0,0,b.Canvas.Font.Color,fsBorder);

  // figurenbitmap
  figur.SetSize(br,ho);
  // transparenz festlegen
  figur.TransparentColor := clred;
  figur.TransparentMode := tmFixed;
  figur.Transparent := true;

  // die 10 figuren in png files abspeichern
  hl := 0;
  for i := 1 to 10 do
  begin
    figur.Canvas.CopyRect(Rect(0,0,figur.Width,figur.Height), b.Canvas, Rect(hl,0,hl+br,ho) );
    pngfigur.Assign( figur );
    pngfigur.SaveToFile( extractfilepath(paramstr(0)) + 'fig' + i.ToString + '.png' );
    inc(hl,br);
  end;
 finally
  b.Free;
  figur.Free;
  pngfigur.Free;
 end;
end;

Kevinpptx 28. Apr 2024 12:02

AW: Transparenz-Farbe von TImage ändern
 
Danke erstmal für die vielen Antworten!

Zitat:

Zitat von Uwe Raabe (Beitrag 1536194)
Zitat:

Zitat von Kevinpptx (Beitrag 1536186)
Auf jeden Fall funktioniert es ja nicht. Nicht mit $FE5334 und nicht mit $5334FE, was auch immer richtig ist.

Hier funktioniert es. Dies ist mein Code:
Delphi-Quellcode:
var b : TBitmap;
    pxc: TColor;
    hxc : string;
begin
  b := TBitmap.Create();
  try
    b.Transparent := true;
    b.TransparentColor := $005334FE;
    b.LoadFromFile('c:\Users\Uwe\Downloads\Koenig_weiss.bmp');
    Image1.Picture.Graphic := b;
    Image1.Transparent := True;
    if (Image1.Picture.Bitmap.Canvas.Pixels[0, 0] = $5334FE) then ShowMessage('toll'); // kommt!


    pxc := Image1.Picture.Bitmap.Canvas.Pixels[0, 0];
    hxc := IntToHex(ColorToRGB(pxc), 6);
    ShowMessage(hxc); // zeigt 5334FE
  finally
    b.Free;
  end;
end;

Mit diesem Code kommt zumindest auch "toll" bei mir, allerdings ist das Bild immer noch nicht transparent :(.

Kevinpptx 28. Apr 2024 12:07

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1536190)
Das oben verlinke Bild hat aber auch keinen durchgehenden Rand in $005334FE, sondern 'nen kleinen schwarzen Block und 'nen recht großen weißen Balken. Wenn mich nicht alles täuscht, dürfte Pixels[0, 0] = $FFFFFF sein.

Dashier
Delphi-Quellcode:
b.TransparentColor := $FE5334;
verstehe ich nicht. Wenn ich bei meinem Delphi bei irgendeiner Komponenten als Farbe $FE5334 vergebe, wird's blau, bei $5334FE erhalte ich jedoch ein rotes Bild, so wie in der verlinkten Datei.

Frag' doch mal den Debugger, welchen Wert
Delphi-Quellcode:
Image1.Picture.Bitmap.Canvas.Pixels[0, 0]
hat, dann kannst Du sehen, welcher Wert hier vergeben wurde und warum eine Abfraqge auf $FE5334 bzw. $5334FE scheitert.

Wenn's mit dem Debugger nicht geht dann halt einfach mal ein
Delphi-Quellcode:
ShowMessage(IntToHex(Image1.Picture.Bitmap.Canvas.Pixels[0, 0]));

Tut mir Leid für die Verwirrung. Inzwischen hatte ich bereits das Bild ohne die schwarzen und weißen Pixel verwendet, aber vergessen, dass oben noch das Original verlinkt war. Ich habe das richtige Bild jetzt oben verlinkt.

Kevinpptx 28. Apr 2024 12:10

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536197)
himitsu hat in #6 Links auf Schachfiguren in Unicode Zeichensätzen gepostet (es gibt viele, auch um einen WInkel w gedrehte).

Hier unten ein Beispiel, wie du alle 10 Schachfiguren eines Unicodezeichensatzes je als PNG abspeichern kannst.

Alternativ zum Speichern in PNGs könntest du die Bitmaps in eine Imagelist schreiben und hättest dann via diese Liste einfachen Zugriff auf die Bilder (Addmasked).

Delphi-Quellcode:
uses PNGImage;

procedure TForm108.Button1Click(Sender: TObject);
var figur, b : TBitMap;
    pngfigur : TPNGImage;
    cs : unicodestring;
    hl, br, ho, i : integer;
    te : TSize;
begin
  for i := $2654 to $265f do cs := cs + widechar(i);
  b := TBitMap.Create;
  figur := TBitMap.Create;
  pngfigur := TPNGImage.Create;
 try
  br := 200; // breite einer schachfigur grafik
  ho := 200; // hölhe

  b.SetSize( 10*br, ho ); // bitmap, in welche wir alle 10 figuren schreiben werden
  b.Canvas.Font.Name := 'Segoe UI Symbol1'; // eine unicode fähige schrift wählen
  // Arial Unicode MS1, Code20001, DejaVu Sans1, DejaVu Sans Mono1, Segoe UI Symbol1, Symbola1, Unifont1
  b.Canvas.Font.Height := b.Height; // schrifthöhe
  b.Canvas.Font.Color := clblack; // farbe der schrift

  hl := 0;
  // figuren zeichnen
  for i := 1 to 10 do
  begin
    te := b.Canvas.TextExtent(cs[i]);
    b.Canvas.TextOut(hl+(br-te.cx) div 2, (ho-te.cy) div 2, cs[i] );
    inc(hl,br);
  end;
  // umgebung der figuren rot einfärben bis zur randfarbe der figuren
  b.Canvas.Brush.Color := clred;
  b.Canvas.Brush.Style := bsSolid;
  b.Canvas.FloodFill(0,0,b.Canvas.Font.Color,fsBorder);

  // figurenbitmap
  figur.SetSize(br,ho);
  // transparenz festlegen
  figur.TransparentColor := clred;
  figur.TransparentMode := tmFixed;
  figur.Transparent := true;

  // die 10 figuren in png files abspeichern
  hl := 0;
  for i := 1 to 10 do
  begin
    figur.Canvas.CopyRect(Rect(0,0,figur.Width,figur.Height), b.Canvas, Rect(hl,0,hl+br,ho) );
    pngfigur.Assign( figur );
    pngfigur.SaveToFile( extractfilepath(paramstr(0)) + 'fig' + i.ToString + '.png' );
    inc(hl,br);
  end;
 finally
  b.Free;
  figur.Free;
  pngfigur.Free;
 end;
end;

Hallo Michael, danke schonmal für deine Mühe! Ich habe noch Hoffnung auf den Ansatz, der hier die ganze Zeit besprochen wird (vor allem, weil es bei Uwe Raabe zu funktionieren scheint), aber wenn ich das aufgebe, dann werde ich mir deine Lösung mal genauer anschauen.

Kevinpptx 28. Apr 2024 12:15

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von TomyN (Beitrag 1536191)
Dreh mal die Sequenz um, d.h. lade erst die Bitmap und setze dann die Transparenzparameter

Hat leider nicht funktioniert.

Michael II 28. Apr 2024 14:36

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536198)

Mit diesem Code kommt zumindest auch "toll" bei mir, allerdings ist das Bild immer noch nicht transparent :(.

Ich habe den Code auch geladen in D11.2. Bei mir wird zuerst auch toll angezeigt, dann wird im Image ein dunkelgrauer König angezeigt (erwartet weiss). Die dünne Linie am unteren Bildrand wird (wie im Quellbild) aber weiss dargestellt. Alles um den König rum ist transparent.

Kevinpptx 28. Apr 2024 14:45

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

Zitat von Michael II (Beitrag 1536203)
Zitat:

Zitat von Kevinpptx (Beitrag 1536198)

Mit diesem Code kommt zumindest auch "toll" bei mir, allerdings ist das Bild immer noch nicht transparent :(.

Ich habe den Code auch geladen in D11.2. Bei mir wird zuerst auch toll angezeigt, dann wird im Image ein dunkelgrauer König angezeigt (erwartet weiss). Die dünne Linie am unteren Bildrand wird (wie im Quellbild) aber weiss dargestellt. Alles um den König rum ist transparent.

Wieso ist bei mir dann immer noch alles rot?
Anhang 56807

Ich habe mal meinen Projektordner hier hochgeladen, falls es hilft (Relevant im Projekt ist das Image oben Rechts im Hauptformular und die Methode Image1Click in UMain):

Anhang 56808 (Verwendet Delphi 11.3)

Michael II 28. Apr 2024 14:47

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536200)
[
Hallo Michael, danke schonmal für deine Mühe! Ich habe noch Hoffnung auf den Ansatz, der hier die ganze Zeit besprochen wird (vor allem, weil es bei Uwe Raabe zu funktionieren scheint), aber wenn ich das aufgebe, dann werde ich mir deine Lösung mal genauer anschauen.

Dann hast du gleich alle 10 Schachfiguren aufs Mal - bei 200x200 Pixel benötigen diese 20.9 KB (21’448 Bytes) - und du musst sie nicht mal auf Platte speichern; kannst die Figuren zur Laufzeit in der von dir gewünschten Grösse erzeugen lassen.
Dein weisser König allein frisst 6.03 MB (6’327’450 Bytes) Speicher...

Und wie erwähnt: Wenn du deine Bitmap in einem Malprogramm transparent abspeicherst (ob als ARGB BMP oder PNG), dann hast du in Delphi kein Problem mehr mit dem Laden.

Kevinpptx 28. Apr 2024 14:52

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536205)
Zitat:

Zitat von Kevinpptx (Beitrag 1536200)
[
Hallo Michael, danke schonmal für deine Mühe! Ich habe noch Hoffnung auf den Ansatz, der hier die ganze Zeit besprochen wird (vor allem, weil es bei Uwe Raabe zu funktionieren scheint), aber wenn ich das aufgebe, dann werde ich mir deine Lösung mal genauer anschauen.

Dann hast du gleich alle 10 Schachfiguren aufs Mal - bei 200x200 Pixel benötigen diese 20.9 KB (21’448 Bytes) - und du musst sie nicht mal auf Platte speichern; kannst die Figuren zur Laufzeit in der von dir gewünschten Grösse erzeugen lassen.
Dein weisser König allein frisst 6.03 MB (6’327’450 Bytes) Speicher...

Und wie erwähnt: Wenn du deine Bitmap in einem Malprogramm transparent abspeicherst (ob als ARGB BMP oder PNG), dann hast du in Delphi kein Problem mehr mit dem Laden.

Ich werde es um 17:00 Uhr mal versuchen und mich dann melden.

Michael II 28. Apr 2024 15:35

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536204)
Wieso ist bei mir dann immer noch alles rot?
Ich habe mal meinen Projektordner hier hochgeladen,

Ich habe dein Projekt geladen.
Mit dem ursprünglich geposteten BMP: Meldungen "toll" sowie Farbcodes wie erwartet. König dunkelgrau (erwartet weiss), Umgebung transparent.
Mit deinem neuen BMP File: "toll", Farbcodes wie erwartet, König weiss, Umgebung rot (nicht transparent).

Kevinpptx 28. Apr 2024 15:43

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536208)
Zitat:

Zitat von Kevinpptx (Beitrag 1536204)
Wieso ist bei mir dann immer noch alles rot?
Ich habe mal meinen Projektordner hier hochgeladen,

Ich habe dein Projekt geladen.
Mit dem ursprünglich geposteten BMP: Meldungen "toll" sowie Farbcodes wie erwartet. König dunkelgrau (erwartet weiss), Umgebung transparent.
Mit deinem neuen BMP File: "toll", Farbcodes wie erwartet, König weiss, Umgebung rot (nicht transparent).
Dann habe ich gedacht, ich lösche mal dein Image1 und füge ein neues ein. Ergebnis mit deinem neuen BMP File; "toll", Farbcodes wie erwartet. König hat das Weite gesucht: alles rot.

Das wird alles immer verwirrender hier :roteyes:

Michael II 28. Apr 2024 16:58

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536209)

Das wird alles immer verwirrender hier :roteyes:

Hast du an der roten Farbe "rumgeschraubt" ;-). Ich behaupte nun, dass der König nicht weiss sein muss - du hast diesen ja 233,233,233 definiert - also alles OK (falls er dann bei dir auch transparent...).

TomyN 28. Apr 2024 17:06

AW: Transparenz-Farbe von TImage ändern
 
Könnte es sein, dass die Bitmap 32 Bit ARGB ist, d.h. noch ein Alphawert von $FF000000 hat, und daher Transparentcolor etc. 'ins Leere läuft'?
Manche Graphikprogramme neigen auch dazu, selbständig Ränder und Übergänge zu 'verschönern'.

Kevinpptx 28. Apr 2024 17:09

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536210)
Zitat:

Zitat von Kevinpptx (Beitrag 1536209)

Das wird alles immer verwirrender hier :roteyes:

Hast du an der roten Farbe "rumgeschraubt" ;-). Ich behaupte nun, dass der König nicht weiss sein muss - du hast diesen ja 233,233,233 definiert - also alles OK (falls er dann bei dir auch transparent...).

Er ist ja eben nicht transparent :(.

Kevinpptx 28. Apr 2024 17:11

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von TomyN (Beitrag 1536211)
Könnte es sein, dass die Bitmap 32 Bit ARGB ist, d.h. noch ein Alphawert von $FF000000 hat, und daher Transparentcolor etc. 'ins Leere läuft'?
Manche Graphikprogramme neigen auch dazu, selbständig Ränder und Übergänge zu 'verschönern'.

Aha, und wie überprüfe ich das?

Michael II 28. Apr 2024 17:24

AW: Transparenz-Farbe von TImage ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir den König noch in eine .png umgewandelt. (Attached)
Benötigt 300 Mal weniger Platz und lässt sich einfach laden:

Delphi-Quellcode:
try
  Image1.Picture.LoadFromFile('C:\Users\micha\Desktop\kw.png');
except
  on E: Exception do
    ShowMessage('Fehler beim Laden des Bildes: ' + E.Message);
end;

Kevinpptx 28. Apr 2024 17:55

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536214)
Ich habe dir den König noch in eine .png umgewandelt. (Attached)
Benötigt 300 Mal weniger Platz und lässt sich einfach laden:

Delphi-Quellcode:
try
  Image1.Picture.LoadFromFile('C:\Users\micha\Desktop\kw.png');
except
  on E: Exception do
    ShowMessage('Fehler beim Laden des Bildes: ' + E.Message);
end;

Deine angehängte Datei ist ein .jpg.

Michael II 28. Apr 2024 18:58

AW: Transparenz-Farbe von TImage ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Keine Ahnung, weshalb eine JPG draus wurde - eventuell bin ich zu doof fürs Attachen. Bei mir war's noch eine png.

Ich packe die Datei mal in eine ZIP und hoffe, dass die Forensoftware gnädig zu mir ist. Leider weiss ich nicht, wie ich Attachments abändern kann (kann man das?). Ja man kann - zu spät... ;-)

Kevinpptx 28. Apr 2024 19:38

AW: Transparenz-Farbe von TImage ändern
 
Vielen Dank an alle für die vielen Antworten! Ich habe mich schlussendlich doch den PNGs ergeben und dieser Code hat mein Problem dann endgültig beseitigt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
    Stream: TMemoryStream;
    Image: TPngImage;
begin
  Stream := TMemoryStream.Create;
  try
    // PNG-Bild erhalten, aus Datei oder anderem laden...
    // Beispiel: Stream.LoadFromFile('c:\\file.png');
    Stream.LoadFromFile('kw.png');
    Stream.Position := 0;

    Image := TPngImage.Create;
    try
      Image.LoadFromStream(Stream);
      Image1.Picture.Graphic := Image;
      Image1.BringToFront();
    finally
      Image.Free;
    end;
  finally
    Stream.Free;
  end;
end;
Danke nochmal, ohne euch wäre ich aufgeschmissen :D

Michael II 28. Apr 2024 19:56

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Kevinpptx (Beitrag 1536218)
Stream: TMemoryStream;

Wie erwähnt: Du kannst das Bild auch direkt in dein image1 laden (also ohne Umweg über Streams oder TPNGImages):

Delphi-Quellcode:
Image1.Picture.LoadFromFile('kw.png');
Der Code in #19 erzeugt dir für jede Schachfigur ein PNG-File.

Kevinpptx 28. Apr 2024 20:11

AW: Transparenz-Farbe von TImage ändern
 
Zitat:

Zitat von Michael II (Beitrag 1536219)
Zitat:

Zitat von Kevinpptx (Beitrag 1536218)
Stream: TMemoryStream;

Wie erwähnt: Du kannst das Bild auch direkt in dein image1 laden (also ohne Umweg über Streams oder TPNGImages):

Delphi-Quellcode:
Image1.Picture.LoadFromFile('kw.png');
Der Code in #19 erzeugt dir für jede Schachfigur ein PNG-File.

Hast Recht, danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr.

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