AGB  ·  Datenschutz  ·  Impressum  







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

PNG zur Laufzeit in ImageList einfügen

Ein Thema von bezarre · begonnen am 1. Mai 2010 · letzter Beitrag vom 12. Feb 2011
Antwort Antwort
David Martens

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

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 17: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 17:41 Uhr)
  Mit Zitat antworten Zitat
David Martens

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

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 17:39
@Thom: und das Ganze funktioniert auch noch mit TImageList?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 17:46
Zitat:
EWeiss: sorry, aber eine weitere DLL an alle Benutzer ausliefern wollte ich dann doch nicht.
He?
Was für eine DLL?
GDI+ ist auf allen Systemen enthalten.

Zitat:
Weshalb also die ganzen Kopfstände mit GDI+, TPngImageList und Co.?
Weil GDI+ und das ist Fakt einfach das beste ist wenn es um PNG Dateien geht.
Zumindest meine Erfahrung.

gruss

Geändert von EWeiss (10. Feb 2011 um 18:19 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 18:21
@Thom: und das Ganze funktioniert auch noch mit TImageList?
Ja. Hier der Beweis:
ImageList_1.jpg
Das rechte obere Smiley ist ein TImage mit dem Original-PNG-Bild. Im FormShow-Event wird dieses Bild in eine normale Image-Liste kopiert (siehe erstes Beispiel). Diese Image-Liste wird vom Button zur Darstellung des Icons genutzt (ohne jeglichen eigenen Quelltext). Das Quadrat unteren ist ein TShape-Objekt, das in seiner rechten oberen Ecke von einer kleinen PaintBox überlagert ist und in die mit
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  ImageList1.Draw(PaintBox1.Canvas,0,0,0);
end;
gezeichnet wird. Mehr ist das nicht: Keine Magie, keine Tricks...
Eine Vergrößerung zeigt, das der Alpha-Kanal wirklich vorhanden ist:
ImageList_2.jpg

GDI+ ist auf allen Systemen enthalten.
Nein. Zum Beispiel auf Windows 98 und Windows 2000 noch nicht.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 18:25
Ich möchte bezweifeln das der AlphaChannel korrekt angezeigt wird..
Schon mal den AlphaChannel auf 75% Durchsichtigkeit verändert und dann anzeigen lassen ?

es sollte ja dann Transparent über deinen Panel liegen (Durchscheinend)

So in der art .. Siehe Pic
Hintergrundbild mit aufgesetztem PNG AlphaChannel 50%

gruss

Geändert von EWeiss ( 9. Jul 2019 um 08:32 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#6

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 18:49
OK - Hier der Versuch mit Geister-Smileys:
ImageList_3.jpg
Die Transparenz ist gut zu erkennen. Allerdings wird auch sichtbar, daß die Objekte (TImage und TButton) offenbar etwas unterschiedliche Zeichenalgorithmen verwenden, da die Farbsättigung differiert.

P.S.:
@EWeiss: Dein Bild sieht natürlich besser aus!
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (10. Feb 2011 um 19:00 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 18:52
OK - Hier der Versuch mit Geister-Smileys:
Anhang 33337
Die Transparent ist gut zu erkennen. Allerdings wird auch sichtbar, daß die Objekte (TImage und TButton) offenbar etwas unterschiedliche Zeichenalgorithmen verwenden, da die Farbsättigung differiert.
Supi..
Danke das du mich überzeugen konntest.
Denke damit kann man leben

Zitat:
P.S.:
@EWeiss: Dein Bild sieht natürlich besser aus!
Jo denke auch
hehehehe

gruss

Geändert von EWeiss ( 9. Jul 2019 um 08:32 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#8

AW: PNG zur Laufzeit in ImageList einfügen

  Alt 10. Feb 2011, 19:04
Danke das du mich überzeugen konntest.
Keine Ursache - gern geschehen!

P.S.:
Dein Bild wird ja immer besser!
Gefällt mir!
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (10. Feb 2011 um 19:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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