AGB  ·  Datenschutz  ·  Impressum  







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

Png + imagelist = fehler

Ein Thema von creehawk · begonnen am 1. Mär 2020 · letzter Beitrag vom 4. Mär 2020
Antwort Antwort
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#1

Png + imagelist = fehler

  Alt 1. Mär 2020, 17:20
Moin.

Ich möchte in ein Listview dynamisch Bilder setzen. Klappt prima,solange ich Icons oder Bitmaps nehme.
Jetzt wäre Transparenz nett. Laut Hilfe kann TImageList auch das Format PNG. (cs32bit, dsTransparent usw.)

Also habe ich das hier produziert:

Delphi-Quellcode:
procedure TMain.TestClick(Sender: TObject);
Var
I:Integer;
ListItem : TListItem;
ItemListStandard : TStringList;
ItemListStandardGUID : TStringList;
Image : TPNGImage;
begin
ItemListStandard := TStringList.Create;
ItemListStandardGUID := TStringList.Create;
Image := TPngImage.Create;
ItemUnits := ItemRoot.SelectNodes('Item');
For I := 0 to ItemUnits.length-1 do
  begin
  If AnsiPos('Zoo',ItemUnits.item[I].attributes[3].Text) > 0 then
    begin
    ItemListStandard.Add(ItemUnits.Item[I].attributes[1].Text);
    ItemListStandardGUID.Add(ItemUnits.Item[I].attributes[0].Text);
    Iamge.LoadFromFile(PNGPath + ItemUnits.Item[I].attributes[5].Text);

    ImageList.add // ja, wie kriege ich die PNG's in die ImageList?
    end;
  end;

  For I := 0 to ItemListStandardGUID.Count-1 do
  begin
    ListItem := ListView.Items.Add;
    Listitem.Caption := ItemlistStandardGUID.Strings[I];
    Listitem.Subitems.add(ItemlistStandard.Strings[I]);
    ListItem.ImageIndex := I;
  end;
end;
Aber an der markierten Stelle fehlt mir das KnowHow. Im Netz finde ich nur alte Kamellen von 2010 zum Thema.

Kann jemand helfen?

creehawk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Png + imagelist = fehler

  Alt 1. Mär 2020, 18:03
Es hat sich nichts geändert, TImageList in der VCL kann nur TBitmaps und Verwadte wie TIcon, da es intern das Bitmap speichert und zusätzlich eine optionale Maske.
Im FMX sieht das anders aus.

Also entweder du verwendest eine ImageList von einem anderen Hersteller (z.B. TPngImageList) oder du mußt das PNG erstmal in ein TBitmap umwandeln.
https://www.delphipraxis.net/150954-...einfuegen.html

PS: Der Property-Editor von Delphi ist dort zu finden.
ImgEdit.pas -> TImageListEditor.AddClick -> TImageListEditor.DoAdd(Graphic: TGraphic; ...) -> TImageInfo.Create
C:\Program Files (x86)\Embarcadero\Studio\20.0\source\Property Editors\de\ (Delphi 10.3 = IDE-Version 20.0)
$2B or not $2B

Geändert von himitsu ( 1. Mär 2020 um 18:37 Uhr)
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Png + imagelist = fehler

  Alt 1. Mär 2020, 18:28
Aha, alles klar.

Ich habe das jetzt mal so gemacht - also über Bitmap - und da die Transparenz "mitkommt" ist alles genauso wie ich mir das gedacht habe.

Besten Dank!!

creehawk
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Png + imagelist = fehler

  Alt 2. Mär 2020, 09:49
einen hab' ich noch....

Wie gesagt alles läuft wie bisher vorgesehen mit dem Listview, jetzt habe ich noch die mir bekannte Prozedure für das Färben eines ausgewählten Eintrags (OnDrawItem, Canvas etc.) eingestellt und natürlich wird das Image jetzt vom Canvas überpinselt.

Ergo denke ich das ich das Image auch selber zeichnen muss. Tja, fragt sich bloß wie.

Hat jemand einen Hinweis? Per Google kommen jedenfalls nur begrenzt verständliche Infos.

Creehawk
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.081 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Png + imagelist = fehler

  Alt 2. Mär 2020, 22:57
Vielleicht noch ein paar Hinweise zu PNG in ImageList (VCL, D2010, wenn's nicht so langsam gefixt wurde):
- TBitmap.Assign(TPNGImage) glättet das Bild zu Schwarz, behält aber den Alphakanal. Der Farbkanal ist somit Blödsinn und bei transparenten Bereichen umso mehr zu dunkel, je näher man an 50% Deckkraft ist. Weist man ein weißes PNG-Bild mit 50% Deckkraft einer Bitmap zu, hat man ein graues Bild mit 50% Deckkraft. Man muss daher nach Assign immer noch Canvas.CopyRect aufrufen, um die korrekten Farbinformationen erneut zu kopieren.
- Ich füge das sich ergebende Bitmap mit AddMasked(Bitmap, clNone) hinzu. Ich glaube, das macht man so.
- TImageList.ReplaceMasked unterstützt keinen Alphakanal. Add und Insert gehen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
241 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Png + imagelist = fehler

  Alt 4. Mär 2020, 11:25
OK, danke für diese Hinweise. Zugegeben, hat eine Weile gedauert bis ich das begriffen habe....

creehawk
  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 14:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz