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