Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

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 :(.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 Uhr.
Seite 2 von 4     12 34      

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