AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Erledigt] PNG kann nicht geladen werden wegen CRC Fehler

[Erledigt] PNG kann nicht geladen werden wegen CRC Fehler

Ein Thema von berens · begonnen am 14. Mär 2022 · letzter Beitrag vom 15. Mär 2022
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

[Erledigt] PNG kann nicht geladen werden wegen CRC Fehler

  Alt 14. Mär 2022, 22:17
Zitat:
Dieses "Portable Network Graphics" Bild ist ungültig, weil Teile der Daten fehlerhaft sind (CRC-Fehler)
Bzw:
Zitat:
EPngInvalidCRCText = 'This "Portable Network Graphics" image is not valid because it contains invalid pieces of data (crc error)
Hallo!
Da ich im Internet keine Lösung für diese Problem gefunden habe, hier kurz meine Erkenntnisse für die Nachwelt:

Problem:
Beim Laden einer PNG-Datei über z.B. Image1.Picture.LoadFromFile kann es zu einer Exception kommen, und das Bild wurde nicht geladen. Leider klappen auch die Alternativen über GR32 etc. nicht, die Grafik kann aber in Windows und den meisten (nicht Allen!) anderen Programmen korrekt angezeigt werden.

Ursache: Die CRC-Prüfsumme der PNG-Datei ist falsch oder fehlt. Dies kann man sehen, wenn man die Datei z.B. in einem Hex-Editor oder Notepad++ aufmacht, und sich dort das 2-4 Byte nach dem Dateibeginn "%PNG" anschaut. In meinem Beispiel war der Wert NUL bzw. 0x00.

Da die Bilder -in meinem Fall- vom Kunden geliefert werden, und ich keinen Einfluss auf die Erstellung der Prüfsumme habe, sollen sie halt trotzdem geladen werden, falls irgendwie möglich.

Lösung:
Man muss den Quellcode der Vcl.Imaging.pngimage.pas bzw pngimage.pas bearbeiten. Füge die Unit deinem Projekt hinzu (Ich finde sie bei mir unter C:\Program Files (x86)\Embarcadero\Studio\21.0\source\vcl ), und ändere die Zeilen

Delphi-Quellcode:
{$DEFINE ErrorOnUnknownCritical} //Error when finds an unknown critical chunk
{$DEFINE CheckCRC}               //Enables CRC checking
so ab, dass das $Define nicht mehr gilt (Punkt vor das $-Zeichen):

Delphi-Quellcode:
{.$DEFINE ErrorOnUnknownCritical} //Error when finds an unknown critical chunk
{.$DEFINE CheckCRC}               //Enables CRC checking
Projekt neu kompilieren und austesten - bei mir geht's nun.

Man muss sich natürlich der möglichen Nebeneffekte wie z.B. der "falschen" Darstellung einer wirklich defekten Datei bewusst sein, aber da andere Programm sie in dem Fall auch nicht richtig Dargestellt werden würden, kann man das dem Kunden auch klar kommunizieren im vgl. zu "Ja, andere Programme können schon die PNG-Datei laden - nur halt meines nicht...".

Nachdem man die pngimage einmalig kompiliert hat, kann man sie eigentlich auch wieder aus dem Projekt entfernen - die Änderungen sollten afaik dauerhaft erhalten bleiben bis Delphi oder der PC neu installiert werden - da muss man sich halt einen Reminder machen, auf dem neuen PC die Änderungen auch vorzunehmen. Ich glaube, ich lasse vorsichtshalber die pngimage in Zukunft von meinem Hauptprojekt mitkompilieren - man weiß ja nicht.

Für konstruktive Anmerkungen zu dem Thema bin ich dankbar,
ich hoffe ich konnte Euch und meinem "Zukunfts-Ich" mit dieser Info weiterhelfen!

lg
Delphi 10.4 32-Bit auf Windows 10 Pro 64-Bit, ehem. Delphi 2010 32-Bit auf Windows 10 Pro 64-Bit
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.958 Beiträge
 
Delphi 12 Athens
 
#2

AW: [Erledigt] PNG kann nicht geladen werden wegen CRC Fehler

  Alt 15. Mär 2022, 18:11
Hallo,

du könntest in QP https://quality.embarcadero.com
einen feature Request einstellen und dir damit eine "IgnoreCRCErrors" property für TPNGImage
wünschen. Nutzung natürlich auf eigene Gefahr und Default natürlich aus.
Du solltest es dann aber damit begründen, dass du schon fehlerhafte PNGs ohne/mit falscher
Prüfsumme erhalten hast, die sich sonst gar nicht laden lassen.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#3

AW: [Erledigt] PNG kann nicht geladen werden wegen CRC Fehler

  Alt 15. Mär 2022, 18:16
Das ist in der Tat nicht ganz glücklich gelöst. Als die Units noch Open Source waren, konnte man die Defines ja problemlos für sich setzen.

Das geht nun nicht mehr, da die VCL ja in kompilierter Form mitgeliefert wird. Jetzt wäre wohl eher globale Variablen angesagt.

Ich plädiere da auch für einen entsprechenden Feature-Request.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:23 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