AGB  ·  Datenschutz  ·  Impressum  







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

PNG in TImage falsch dargestellt

Ein Thema von tumo · begonnen am 14. Apr 2020 · letzter Beitrag vom 29. Apr 2020
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
tumo

Registriert seit: 28. Apr 2014
46 Beiträge
 
Delphi 10.3 Rio
 
#1

PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 14:38
Delphi-Version: 10.3 Rio
Hallo,

ich habe ein kleines Programm, was mir Texturen auflistet und diese nach Bedarf anzeigt. Die Texturen sind als PNG gespeichert und werden (dank PNGImage) auch problemlos von Delphi geladen. Die Texturen sind fast immer 32x32 px groß und damit ich diese auf einem FHD Bildschirm auch ordentlich beurteilen kann, dachte ich, ich stelle sie ein wenig größer dar. TImage war von dieser Idee leider weniger begeistert, da es manche der Texturen mit schwarzem Outline darstellt. Dabei trat der Fehler bisher nur bei Bildern mit (genutztem) Alpha-Channel auf, jedoch auch nicht bei jedem Bild mit Alpha-Werten. Damit ist die Beurteilung der Texturen logischerweise unmöglich, da nicht korrekt dargestellt. Wenn ich mir die Pixeldaten vom TImage (!) ausgeben lasse, ist alles korrekt, also muss ein Fehler bei der gestreckten Darstellung passieren.

Zum Verständnis: Das TImage hat Proportional := true und Stretch := true . Das TImage soll das Bild auf eine Größe von 144x144 px, ultimativ aber auf jede beliebige Größe skalieren können. Der Fehler tritt nicht auf, wenn das TImage auf 64x64 px (x2) skaliert, bei 128x128 px (x4) wiederum schon.

Was übersehe ich hier? Warum werden bei manchen (aber nicht allen) PNGs solche Outlines dargestellt?

Im Anhang sehr ihr einmal das Originalbild (in 32 px und 144 px) und was das TImage daraus macht (in 144 px).
Miniaturansicht angehängter Grafiken
original144.png   image144.png  
Angehängte Grafiken
 
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 15:01
TImage (zumindest das der VCL) basiert auf der alten GDI, welche mit Transparenzen nicht wirklich umzugehen weiß, auch wenn sie korrekt in den Rohdaten stehen. Wenn du bei VCL bleiben willst (bzw. musst), ist die Graphis32 Lib eine sehr sehr gute freie und offene Alternative, die auch mit Transparenz vernünftig spielt. Man könnte auch auf die GDI+ zurückgreifen, da gibt es auch freie Header zu, jedoch fand ich die Arbeit damit immer recht klobig. Dazu kommt, dass auch GDI+ schon seit Jahren abgekündigt ist.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 16:10
Mein Favorit ist das deutlich modernere Delphi-Referenz durchsuchenTWicImage.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 16:58
Natürlich nur in der VCL, da es die WinAPI nutzt und leider sind auch da paar Dinge blöd eingebaut, vor allem da im StretchDraw nicht deren API Inteface genutzt wird, sondern das auf brutalst mögliche Weise selbst implementiert wurde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Redeemer

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

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 19:11
Sind die PNGs, wo es nicht geht, Palettenbilder?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
tumo

Registriert seit: 28. Apr 2014
46 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 22:12
Danke für die schnellen Antworten.

@Medium
Habe mir die graphics32 mal angeschaut. Nach fast einer halben Stunde Harreraufen mit den Delphi Settings ging es dann endlich. Es tut, was es muss, aber nicht so richtig was es soll. Nicht falsch verstehen, meine Bitmaps werden bildschön, skaliert und mit Transparenz angezeigt, aber die eigentliche Zuweisung der Bitmaps ist alles andere als verständlich für mich . Habe eine Liste mit Objekten, die Namen, ein paar andere Daten und eben auch die Bilder selbst speichern sollen. Diese sollen dann bei Bedarf angezeigt werden, aber irgendwie bekomme ich die Bitmap nicht von meinem Objekt in das Image32 gedrückt .

@Redeemer
Darf ich erfahren, was Palettenbilder sind?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 22:26
Darf ich erfahren, was Palettenbilder sind?
Wie z.B. bei den 2-, 16- oder 256-Farben-Bitmaps.

PNG kann die Pixel jeweils als RGB speichern, aber es geht auch als Index in einer Farbpalette.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
tumo

Registriert seit: 28. Apr 2014
46 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: PNG in TImage falsch dargestellt

  Alt 14. Apr 2020, 22:42
Ah.
Nun, nicht das ich wüsste.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: PNG in TImage falsch dargestellt

  Alt 15. Apr 2020, 08:29
[...]irgendwie bekomme ich die Bitmap nicht von meinem Objekt in das Image32 gedrückt .
Grundsätzlich sollte das mit einem TBitmap32.DrawTo(TImage32.Bitmap) erledigt sein, ggf. noch ein TImage32.Bitmap.Clear vorausgeschickt. Zeig im Zweifel doch mal das Stück Code, in dem das gemacht wird. Dann kann man evtl. konkreter helfen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Redeemer

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

AW: PNG in TImage falsch dargestellt

  Alt 15. Apr 2020, 08:43
Ah.
Nun, nicht das ich wüsste.
Na ja, die PNG wird es dir nicht von selbst sagen. Da musst du mit einem geeigneten Programm nachschauen. Die Unterstützung für PNG8 mit Alphakanal ist sehr uneinheitlich.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


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 06:00 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