Also ich hab folgendes probiert, aber geht noch nicht:
Delphi-Quellcode:
Image := TPngImage.Create;
Image.Transparent := true;
Image := GetPNG('ABC');
if Image <> nil then
begin
if Color <> clNone then
begin
Image2 := TPngImage.CreateBlank(COLOR_GRAYSCALE, 1, 16, 16);
Image2.Canvas.Brush.Style := bsClear;
Image2.Canvas.Font. Name := 'Small Fonts';
Image2.Canvas.Font. Size := 5;
Image2.Canvas.Font. Color := clBlack;
Image2.Canvas.TextOut(16 - Image.Canvas.TextWidth(Text), - 2, Text); // HIER schreibe ich den Text ins Image2
for y := 0 to Image2.Height - 1 do
begin
for x := 0 to Image2.Width - 1 do
begin
// HIER wird der Text ins Image "kopiert"
if Image2.Canvas.Pixels[x, y] = clBlack then
Image.Pixels[x, y] := clBlack;
end;
end;
end;
end;
with Image do
begin
for y := 0 to Height - 1 do
begin
pb := AlphaScanline[y];
for x := 0 to Width - 1 do
begin
ColorRGBToHLS(ImageColor, NewHue, NewLuminance, NewSaturation);
// HIER soll der Text im Image nicht überschrieben werden
if Pixels[x, y] <> clBlack then
Pixels[x, y] := ColorHLSToRGB(NewHue, Trunc((pb^[x] + NewLuminance) / 2), NewSaturation);
end;
end;
end;
Lieder sehe ich noch keinen Text. Wenn ich TextOut dierekt auf Image mache, sehe ich nur dort Text wo im Ursprungsimage keine Transparenz vorhanden ist.
P.S.: ach so mit ColorHLSToRGB(NewHue, Trunc((pb^[x] + NewLuminance) / 2), NewSaturation); wird das PNG (hat nur den Alphachannel) in der "neuen" Farbe eingefärbt.