Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#18

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 18:38
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.

Geändert von David Martens (10. Feb 2011 um 18:41 Uhr)
  Mit Zitat antworten Zitat