![]() |
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.
|
AW: Transparenz-Farbe von TImage ändern
Zitat:
|
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:
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.
b.TransparentColor := $FE5334;
Frag' doch mal den Debugger, welchen Wert
Delphi-Quellcode:
hat, dann kannst Du sehen, welcher Wert hier vergeben wurde und warum eine Abfraqge auf $FE5334 bzw. $5334FE scheitert.
Image1.Picture.Bitmap.Canvas.Pixels[0, 0]
Wenn's mit dem Debugger nicht geht dann halt einfach mal ein
Delphi-Quellcode:
ShowMessage(IntToHex(Image1.Picture.Bitmap.Canvas.Pixels[0, 0]));
|
AW: Transparenz-Farbe von TImage ändern
Dreh mal die Sequenz um, d.h. lade erst die Bitmap und setze dann die Transparenzparameter
|
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 |
AW: Transparenz-Farbe von TImage ändern
Zitat:
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; |
AW: Transparenz-Farbe von TImage ändern
Delphi-Quellcode:
$578B2E = #2E8B57
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; |
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. |
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; |
AW: Transparenz-Farbe von TImage ändern
Danke erstmal für die vielen Antworten!
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 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