AGB  ·  Datenschutz  ·  Impressum  







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

Transparenz-Farbe von TImage ändern

Offene Frage von "Kevinpptx"
Ein Thema von Kevinpptx · begonnen am 27. Apr 2024 · letzter Beitrag vom 28. Apr 2024
Antwort Antwort
Seite 2 von 4     12 34      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#11

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 19:25
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.

Geändert von Delphi.Narium (27. Apr 2024 um 20:52 Uhr)
  Mit Zitat antworten Zitat
Kevinpptx

Registriert seit: 10. Okt 2022
Ort: Sachsen
29 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 20:24
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#13

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 20:52
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 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 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 ShowMessage(IntToHex(Image1.Picture.Bitmap.Canvas.Pixels[0, 0]));
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
252 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 21:22
Dreh mal die Sequenz um, d.h. lade erst die Bitmap und setze dann die Transparenzparameter
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 22:14
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#16

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 22:15
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 22:26
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
$2B or not $2B
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Transparenz-Farbe von TImage ändern

  Alt 27. Apr 2024, 23:36
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 Gasser
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
763 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Transparenz-Farbe von TImage ändern

  Alt 28. Apr 2024, 01:40
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;
Michael Gasser
  Mit Zitat antworten Zitat
Kevinpptx

Registriert seit: 10. Okt 2022
Ort: Sachsen
29 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Transparenz-Farbe von TImage ändern

  Alt 28. Apr 2024, 13:02
Danke erstmal für die vielen Antworten!

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 .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      

 

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 12:45 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