Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TJPegImage durch TWICImage ersetzen (https://www.delphipraxis.net/203811-tjpegimage-durch-twicimage-ersetzen.html)

Blo 27. Mär 2020 10:20

TJPegImage durch TWICImage ersetzen
 
Hallo!

In einer unserer Anwendungen werden Bilder aus einer Datenbank gelesen und in der Anwendung angezeigt. Bildformat: JPeg.
Das klappt auch soweit ganz gut mit einer "TJPegImage" - Komponente.

Jetzt meldete ein Kunde, dass beim Anzeigen der Bilder ein "JPeg error #53" - Fehler angezeigt wird.
Eine Prüfung ergab, dass der Kunde die Bilder im PNG-Format in der Datenbank gespeichert hatte.

Auf der Suche nach einer Lösung fiel mir die Komponente "TWICImage" auf, die mit verschiedenen Bildformaten umgehen kann.
Nachdem ich die Komponente "TJpegImage" durch "TWICKomponente" ausgewechselt hatte, gab es keinen #53-Fehler mehr und die Bilder wurden richtig angezeigt.

Ist das wirklich so einfach oder wurde von uns etwas übersehen?

TWICImage benötigt DirectX von Microsoft. So wie ich das sehe, ist DirectX aber auf allen Windows-PCs vorinstalliert?!

Gruß
Ulrich

dummzeuch 27. Mär 2020 11:35

AW: TJPegImage durch TWICImage ersetzen
 
Zitat:

Zitat von Blo (Beitrag 1460604)
Eine Prüfung ergab, dass der Kunde die Bilder im PNG-Format in der Datenbank gespeichert hatte.

Nachdem ich die Komponente "TJpegImage" durch "TWICKomponente" ausgewechselt hatte, gab es keinen #53-Fehler mehr und die Bilder wurden richtig angezeigt.

Ist das wirklich so einfach oder wurde von uns etwas übersehen?

Ja, ist es.

Alternativ ginge vielleicht auch TPicture, dann gibt es auch keine Abhängigkeit von GDI+.

himitsu 27. Mär 2020 11:50

AW: TJPegImage durch TWICImage ersetzen
 
Ja, TWICImage unterscheidet intern und kommt mit mehreren Grafikformaten zurecht.

Ich wüsste nicht warum dass es DirectX benötigt, aber wenn in einem Thread oder Consolen-Anwendung, da darf man das CoInitialize nicht vergessen, weil das ist nötig.



TImage/TPicture-LoadFromStream nutzt jetzt den Dateiheader (MagicBytes) für die Unterscheidung (seit Kurzem).
Früher wurde nur über die Dateiendung der Typ erkannt, weswegen man unterschiedliche Bilder nur mit LoadFromFile in TImage/TPicture laden konnte (oder vorher manuell unterscheiden mußte welches TGrafic man verwenden muß).
Delphi-Quellcode:
Image.Picture.LoadFromStream
sollte im 10.3 nun egal sein was für eine Datei im Stream/Blob liegt und es schnappt sich dann die passende TGrafic-Klasse, unter anderem auch das TWICImage.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 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